在c# 中编写com组件,供PB调用实例

前言:c#中写的dll直接是不能被pb调用的,只有写成com组件才可以调用,所以用c#写dll时要注意。

c#中新建类库

类库类型为通用类库,项目名为AddCom

1、配置:右键点击解决方案资源管理器中的AddCom,选择“属性”,选择“应用程序”->“程序集信息”,勾选“使程序集COM可见”,然后点击“生成”,选择“为COM互操作注册”

2、打开AssemblyInfo.cs文件,设置[assembly: ComVisible(true)],如果不改则不能被其他程序调用

3、编写com组件会用到guid(全球唯一ID),编写com组件必须要用到。c#会默认生成一个放在AssemblyInfo.cs,如没有生成,可以用GUID生成器生成,也可以网上下一个生成guid的软件

4、c#中源代码如下

usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;namespaceAddCom

{

[Guid("298D881C-E2A3-4638-B872-73EADE25511C")]public interfaceAddComInterface

{

[DispId(1)]int iadd(int a, intb);

}

[Guid("2C5B7580-4038-4d90-BABD-8B83FCE5A467")]

[ClassInterface(ClassInterfaceType.None)]public classAddComService : AddComInterface

{publicAddComService()

{

}public int iadd(int a, intb)

{int c = 0;

c= a +b;returnc;

}

}

}

至此,关于C#的Dll已经操作完成,下面开始注册

注册DLL

注册有两种方法

1、C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe E:\Test\MyLib.dll /tlb: E:\Test\MyLib.tlb

反注册:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe /u E:\Test\MyLib.dll /tlb: E:\Test\MyLib.tlb

(   这个地址是安装Framework的物理地址,根据自己电脑不同进行修改)得到下面图所示即成功注册

2、run("regasm MyLib.dll /tlb: MyLib.tlb",minimized!)

前提是把regasm.exe文件复制到当前项目中

PB调用DLL

pb中利用ole调用来调用com组件

OLEObject OLEObjectlongli_statusintli_regintli_celstring a = "aa"

string b = "bb"

//创建OLEObject对象

OLEObject =Create OLEObject//创建连接

li_status= OLEObject.ConnectToNewObject("RakbLibrary.Class1")if li_status<>0then//连接不成功,先反注册组件,再重新注册组件

li_cel = run("regasm /u RakbLibrary.dll /tlb:RakbLibrary.tlb",minimized!)if li_cel <> 1then

messagebox('提示','反注册失败!')return

elsemessagebox('提示','反注册成功!')

li_reg= run("regasm RakbLibrary.dll /tlb:RakbLibrary.tlb",minimized!)if li_reg<>1then

messagebox('提示','组件注册失败!')return

elsemessagebox('提示','组件注册成功!')

endifendif

else

//调用类内的公共函数

li_res =OLEObject.getForm(a,b)

endif

//释放资源

OLEObject.DisConnectObject()

如果返回值是-3 ,Object could not be created   生成exe执行文件就好了

注意:li_status 连接状态是0则说明连接DLL成功,否则可能就是DLL没有注册成功,需要重新注册一下(注册是时候最好先反注册一下)

li_cel 注册状态为1则说明注册成功

OLEObject.DisConnectObject()释放资源要放在调用DLL类库的函数之后,否则会接收不到该函数的返回值

所有需要的文件(C#的dll文件和tlb文件,regasm.exe)要放在工程的根目录下,且这几个文件要放在同一目录下

pb调用c语言dll,PB调用C#编写的Dll类库相关推荐

  1. python可以调用c语言吗_python 调用c语言详解

    python语言调用c语言进行扩展,或者增加程序的运行速度都是特别方便的.同时还能获得与C或者C++几乎相同的执行性能. Python调用C语言的方式 CTYPES, SWIG, BOOST.PYTH ...

  2. go 调用c语言,golang之调用C语言代码

    此篇教程只是简单的描述怎么使用以及遇到的一些错误 我写的实例,C语言与golang在同一个文件中,并没有分开. 我这里演示两个例子: ⑴ 调用C语言函数打印"Hello World" ...

  3. c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...

    点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...

  4. python调用r语言加载包错误_Python调用R语言

    网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...

  5. python调用c语言内核计算,在Linux上实现Python调用C语言函数

    一般思路 Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用. 假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y). 将.c文件编译成 .so文 ...

  6. JAVA调用C语言程序

    JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...

  7. 自已编写C# DLL 绑定到unity进程进行单步调试

    测试环境一:mac Catalina-10.15.4, vs2019 for mac, unity2019.3.6f1 for mac 要在VS2019的 [适用于UNITY的工具]中,将 [调试程序 ...

  8. 使用DLL进行不同语言之间的调用

    __declspec(dllexport)是告诉编译器用来导出函数的,在代码中不另作说明了 extern "C"的意思就是用C的方式来导出函数,为什么要用C的方式来导出呢. 因为C ...

  9. c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法

    在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下: int WINAPI add(int x,i ...

最新文章

  1. 【独家】深度学习论文阅读路线图
  2. 【转载】ceph作为OpenStack的后端存储解决方案
  3. html的li浮动之后往下移动,多个li浮动后居中显示问题
  4. leetcode -- 279. Perfect Squares
  5. java new collection_使用Java 8新增的Predicate操作Collection集合
  6. Pillow教程(一)
  7. 仿苹果手机_安卓党福音?安卓手机也能拥有iOS控制中心,十分炫酷
  8. 2022-01-15 OpenCV(3.4.1) Error: Image step is wrong (The matrix is not continuous, thus its
  9. 抖音的服务器到底啥配置?
  10. 0905系统及数据库
  11. 前端白屏问题_前端性能优化之白屏时间
  12. python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试
  13. FPGA串口接收与发送详解( part 3 )
  14. 架构、框架和设计模式
  15. [转]Unsafe at any speed: Memcpy() banished in Redmond
  16. ES6-正则的扩展-u、y修饰符
  17. Photoneo 3D相机丨平行结构光的力量
  18. WMS与TMS实施流程
  19. 高等数学18讲(19版)7.18
  20. 大牌网站都在用的字体,专治选择困难症!|附字体

热门文章

  1. Linux 内核Coding Style整理
  2. 【智驾深谈】Mobileye,用单目视觉点亮自动驾驶
  3. 读书笔记 effective c++ Item 50 了解何时替换new和delete 是有意义的
  4. 微信账号,欢迎一起探讨信息、知识、学习和管理!
  5. linux c 命令行解析 getopt getopt_long optarg optind opterr optopt 简介
  6. golang 切片 slice 拼接
  7. python3 requests模块
  8. shell 获取字符串/文件的MD5值
  9. SQL Server快捷键
  10. Linux C编程--目录文件操作