pb调用c语言dll,PB调用C#编写的Dll类库
在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类库相关推荐
- python可以调用c语言吗_python 调用c语言详解
python语言调用c语言进行扩展,或者增加程序的运行速度都是特别方便的.同时还能获得与C或者C++几乎相同的执行性能. Python调用C语言的方式 CTYPES, SWIG, BOOST.PYTH ...
- go 调用c语言,golang之调用C语言代码
此篇教程只是简单的描述怎么使用以及遇到的一些错误 我写的实例,C语言与golang在同一个文件中,并没有分开. 我这里演示两个例子: ⑴ 调用C语言函数打印"Hello World" ...
- c语言中fact函数怎么调用,C语言程序题: 1、编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现...
点击查看C语言程序题: 1.编写一个求n!的函数fact(n),要求fact函数分别用递归和非递归两种方法实现具体信息 答:int fac(int n) //非递归{int f=1; for(;n;) ...
- python调用r语言加载包错误_Python调用R语言
网络上经常看到有人问数据分析是学习Python好还是R语言好,还有一些争论Python好还是R好的文章.每次看到这样的文章我都会想到李舰和肖凯的<数据科学中的R语言>,书中一直强调,工具不 ...
- python调用c语言内核计算,在Linux上实现Python调用C语言函数
一般思路 Python中内置ctypes库,需调用c编译成的.so文件来实现函数调用. 假设我们所需调用的c文件名为test.c,文件里有我们需要的函数func(x,y). 将.c文件编译成 .so文 ...
- JAVA调用C语言程序
JAVA调用C语言程序 JAVA调用C语言程序 1. 编写带有native声明的方法的Java类 2. 使用javah 生成:jniSample.h的头文件 3. 使用C实现本地sum方法:(这里我生 ...
- 自已编写C# DLL 绑定到unity进程进行单步调试
测试环境一:mac Catalina-10.15.4, vs2019 for mac, unity2019.3.6f1 for mac 要在VS2019的 [适用于UNITY的工具]中,将 [调试程序 ...
- 使用DLL进行不同语言之间的调用
__declspec(dllexport)是告诉编译器用来导出函数的,在代码中不另作说明了 extern "C"的意思就是用C的方式来导出函数,为什么要用C的方式来导出呢. 因为C ...
- c 调用易语言dll字节集,总结VC与易语言DLL互相调用的方法
在编写程序的时候往往需要调用到别的语言编写的DLL文件,下面先来看一下在易语言中如何调用VC编写的DLL呢,首先用VC编写一个简单的DLL文件,代码如下: int WINAPI add(int x,i ...
最新文章
- 【独家】深度学习论文阅读路线图
- 【转载】ceph作为OpenStack的后端存储解决方案
- html的li浮动之后往下移动,多个li浮动后居中显示问题
- leetcode -- 279. Perfect Squares
- java new collection_使用Java 8新增的Predicate操作Collection集合
- Pillow教程(一)
- 仿苹果手机_安卓党福音?安卓手机也能拥有iOS控制中心,十分炫酷
- 2022-01-15 OpenCV(3.4.1) Error: Image step is wrong (The matrix is not continuous, thus its
- 抖音的服务器到底啥配置?
- 0905系统及数据库
- 前端白屏问题_前端性能优化之白屏时间
- python爬取豆瓣电影top250_Python 爬取豆瓣电影Top250排行榜,爬虫初试
- FPGA串口接收与发送详解( part 3 )
- 架构、框架和设计模式
- [转]Unsafe at any speed: Memcpy() banished in Redmond
- ES6-正则的扩展-u、y修饰符
- Photoneo 3D相机丨平行结构光的力量
- WMS与TMS实施流程
- 高等数学18讲(19版)7.18
- 大牌网站都在用的字体,专治选择困难症!|附字体