准备

开发环境

.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 myobjif not isvalid(myobj) thenmyobj = 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

C# 开发COM程序 PD调用示例相关推荐

  1. android开发接口调用,Android开发中webService接口调用示例

    代码示例: package com.study.ws; import java.io.IOException; import org.ksoap2.SoapEnvelope; import org.k ...

  2. 怎样用C/C++开发图形界面(GUI)程序——点名器示例

    怎样用C/C++开发图形界面(GUI)程序--点名器示例 原文链接:https://mp.weixin.qq.com/s/O9PXaibAyd__ONBBASYI_Q 仍旧是Via What系列,昨天 ...

  3. Delphi调用微信原生Web开发接口JS-SDK开发小程序及微信支付等的Rest API

    目录 Delphi调用微信原生Web开发接口JS-SDK开发小程序及微信支付等的Rest API 一.概述及API 1.JS-SDK是对之前的 WeixinJSBridge 的一个包装 2.JS-SD ...

  4. python调用ipython_在IPython中执行Python程序文件的示例

    简单使用了一下之后,我觉得如果有机会(公司里面编码是极不自由的,也无所谓,我在公司不做数据分析),我肯定是更喜欢使用IPython作为我的Python shell环境了.简单的接触发现了不少我喜欢的功 ...

  5. 小程序·云开发的HTTP API调用丨实战

    小程序云开发之httpApi调用. 小程序云开发之httpApi调用(返回"47001处理") 技术栈 采用 nodejs + express 搭建web服务器,采用 axios ...

  6. libsvm java 实例_LibSVM Java API调用示例程序

    [实例简介] LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/804 ...

  7. 如何开发python sdk调用数据_Python SDK调用示例

    开发者可以通过Python SDK,调用物联网数据分析中生成的API. 步骤一:安装SDK 登录Python官方网站下载2.6.5及以上版本的Python,并按说明完成安装. (可选)安装Python ...

  8. VS2010下ocx开发:(2)在C#程序中调用ocx控件

    在本文中,给出一个C#示例程序,调用上一篇博文中创建的MultiplyDemo.ocx控件.注意需要保证该控件已经注册过. 启动Visual Studio 2010,使用C#创建一个Windows窗体 ...

  9. xamarin开发Android程序示例

    前面已经使用xamarin+visual studio配置了Android开发环境,这一次,来测试一下使用visual studio开发Android程序.听上去还是蛮有趣的. 首先使用想到新建一个A ...

最新文章

  1. 腾讯:互联网正进入社区化阶段
  2. Hibernate 一对一注释
  3. GitLab CI持续集成配置方案
  4. U-Boot如何向内核传递Flash的分区信息
  5. Select count(*)和Count(1)的区别和执行效率比较
  6. 编辑器,webstorm,phpstorm系列配置方法汇总-笔记
  7. php后台+前端开发过程整理
  8. 操作系统面试相关总结
  9. php分钟转时间戳,php函数转时间戳
  10. 【对抗攻击代码实战】对抗样本的生成——FGSM
  11. 利用python暴力破解rar压缩文件密码
  12. 全球云服务商排名情况及国内云主机市场占有率份额排名对比
  13. 2022智源大会议程丨类脑计算前沿与挑战
  14. 初级程序员晋升中级程序员,只差这7个技能
  15. 少儿机器人编程课程学什么
  16. 一站式数字藏品收款系统开发解决方案
  17. iphone safaric中将mp4保存到本地相册
  18. 云计算进入多云时代 青云QingCloud如何帮企业做好多云管理?
  19. 亿级(无限级)并发,没那么难
  20. python中一个等于号和两个等于号_python中is与双等于号“==”的区别示例详解

热门文章

  1. 非chrome应用市场插件安装解决办法
  2. 看aps智能排程改善服装制衣行业的问题
  3. 陶渊明复杂感情世界探微 (转)
  4. python制作画板
  5. python基础训练 day4
  6. 计算机无法打开文档,鼠标双击无法打开文件夹的三种解决办法
  7. 英语知识点整理day22-谚语学习(M字母开头)
  8. 您好!欢迎关注异贝!异贝是中国8000万中小微企业忠实的朋友,与您一起成长。异贝商学院今天我们就来设计一个中餐厅(酒楼)的引客、锁客方案!
  9. Python项目文件如何打包成exe,及图标不显示问题的解决方案
  10. java ee框架学那个_Java EE三在主流框架是什么?_学小易找答案