C# 开发COM程序 PD调用示例

准备

开发环境

.net 3.5

开发IDE: vs 2019 个人版

创建DLL 库程序
C# 开发COM程序 PD调用示例_第1张图片
选择 .NET版本

C# 开发COM程序 PD调用示例_第2张图片

编写代码,注意需要将要注册COM的类以及对应的方法进行public 标记
C# 开发COM程序 PD调用示例_第3张图片
简单代码如下

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 };
        }
    }
}

右键点项目,然后选择属性,进行配置
C# 开发COM程序 PD调用示例_第4张图片
应用程序 > 选择 程序集信息… > 勾选 使程序集COM 可见
C# 开发COM程序 PD调用示例_第5张图片

完成配置之后就可以生成dll
C# 开发COM程序 PD调用示例_第6张图片
生成的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
C# 开发COM程序 PD调用示例_第7张图片

这里使用 2.0 的 RegAsm.exe进行注册win + x 打开 管理员模式的PowerShell

C# 开发COM程序 PD调用示例_第8张图片
切换目录到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

有如下执行结果
C# 开发COM程序 PD调用示例_第9张图片
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接收。

C# 开发COM程序 PD调用示例_第10张图片

参考文献

[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

你可能感兴趣的:(C#)