准备
开发环境
.net 3.5
开发IDE: vs 2019 个人版
创建DLL 库程序
选择 .NET版本
编写代码,注意需要将要注册COM的类以及对应的方法进行public
标记
简单代码如下
namespace SimpleTestLib
{
public class MyClass
{
public string UserName { set; get; }
public string SayHello(string content)
{
return "用户:" + this.UserName + "说:" + content;
}
public byte[] Hi()
{
return new byte[] { 0x01, 0x02, 0x03 };
}
}
}
右键点项目,然后选择属性,进行配置
应用程序 > 选择 程序集信息… > 勾选 使程序集COM 可见
完成配置之后就可以生成dll
生成的DLL完整路径: D:\Project\demo\SimpleTestLib\SimpleTestLib\bin\Release\SimpleTestLib.dll
COM 注册
找到生成的dll文件,进行COM的注册
到C盘的目录C:\Windows\Microsoft.NET\Framework
中寻找对应.NET
版本
.Net 版本 | 注册RegAsm.exe程序地址 |
---|---|
2.0/3.0/3.5 | C:\Windows\Microsoft.NET\Framework\v2.0.50727 |
4.0/4.5/4.6 | C:\Windows\Microsoft.NET\Framework\v4.0.30319 |
具体版本可以在C:\Windows\Microsoft.NET\Framework
搜索RegAsm.exe
这里使用 2.0 的 RegAsm.exe
进行注册win + x
打开 管理员模式的PowerShell
切换目录到RegAsm.exe程序所在目录,
cd C:\Windows\Microsoft.NET\Framework\v2.0.50727
运行.\RegAsm.exe [你的DLL完整路径] /codebase
,如:
.\RegAsm.exe D:\Project\demo\SimpleTestLib\SimpleTestLib\bin\Release\SimpleTestLib.dll /codebase
有如下执行结果
warning 可以不管,那是应为/codebase
命名导致的,/codebase
是为了让没签名的程序在不同的机器能运行的标记。
成功注册了类型,那么这个DLL就成功注册COM接口了。
调用示例
这里选择使用 PowerBuilder 9 的powerScript 来调用刚才编写好的程序。
我建了一个简单的窗体,然后放置了一个按钮,点击按钮后调用COM程序功能。
按钮的处理代码如下
long ll_status
string ls_errorinfo, ls_ret
OLEObject myobj
if not isvalid(myobj) then
myobj = CREATE OLEObject
end if
// 命名空间名称 + 类名称 连接对象
ll_status = myobj.connecttonewobject("SimpleTestLib.MyClass")
// 检查是否创建成功,不成则不做任何事,可以在这里弹出提示,简单起见直接返还
IF ll_status <> 0 THEN return
// 对象中的变量赋值
myobj.UserName = '张三'
ls_ret = myobj.SayHello("哈哈")
Messagebox('提示',ls_ret)
destroy myobj
在PB中如果C#DLL方法返还了一个
byte[]
类型的返还值,可以使用 PB中Blob
类型j接收。
参考文献
[1]. 博客园 . PB调用.NET类库详解 . 欣欣点灯 . 2019-10-23 . https://www.cnblogs.com/CoreXin/p/11729692.html
[2]. 博客园 . PowerBuilder调用.Net编译好的DLL . Villison . 2014-12-28 . https://www.cnblogs.com/villison/p/4190729.html
[3]. 博客园 . C#的DLL注册为COM,Delphi来调用 .朝闻道 . 2015-11-26 . https://www.cnblogs.com/findumars/p/4999259.html
[4]. csdn . 如何用RegAsm.exe在开发/生产环境中注册C#/VB.NET开发的DLL . 蝶恋花雨 . 2017-09-24 . https://blog.csdn.net/kongwei521/article/details/78076626
[5]. csdn . C#编写dll库文件并注册为COM组件供其他语言(如PHP等)调用. luochuan . 2013-05-12 . https://blog.csdn.net/luochuan/article/details/8916051
[6]. 博客园 . 用C#创建COM组件全过程 . MFT . 2012-10-14 . https://www.cnblogs.com/panlijiao/archive/2012/10/14/2773881.html
[7]. 乘风原创 . pb函数库之Blob(大二进制对象)函数 . http://study.qqcf.com/web/187/20997.htm
[8]. csdn . 【总结】pb打包全过程 . 秋高工作室. 2014-12-31 . https://blog.csdn.net/tlammon/article/details/42295959