C#开发COM组件供其他开发环境或工具调用介绍(转)
由于工作原因涉及到这一块的开发,由于之前并未接触过,所以本篇文章也是在参考了各种资料后,自己实现并通过通过测试之后所整理的备忘录以及一些个人观点。
希望对刚接触这类型开发的朋友有所帮助,若有不足之处还望不吝赐教。
废话不多说,下面就是教学式内容了,第一次写,没有文采勿见怪。
开发环境: .Net Framework 4.0
开发工具: Microsoft Visual Studio 2010
测试环境: Windows XP、.Net Framework 4.0
测试工具: Delphi7、PowerBuilder8.0
注意:
1、每个COM组件所有对外公布的方法都必须通过接口形式实现;
2、由于.Net下编译的COM组件并等同于C编译的COM组件,所以存在必须在运行目标机器注册的情况,对此.Net下编译的COM组件必须为程序进行签名,即强命名密钥;
步骤:
1、 新建一个类库项目(文件—新建—项目—类库【命名:HK.NetPBDemo】)
2、 针对“注意第一点要求”,新建一个接口文件(项目右键—添加—新建项—接口【命名:IHK.cs】)
3、 IHK.cs接口文件编码:
int TestFunction(int num, string str1, string str2, double db);
4、 将Class1.cs 改名为:HKTest.cs (这步其实很啰嗦,不过文档都整理了,就这样写吧)
提示框点击“是”,如下图
5、 HKTest.cs 类文件编码:
添加名称空间:using System.Runtime.InteropServices;
实现接口、并在类头添加属性:[ClassInterface(ClassInterfaceType.None)]。如下图
6、 在“解决方案资源管理器”中找到节点“Properties”打开AssemblyInfo.cs文件
如下图
7、 将[assembly: ComVisible(false)]属性改成[assembly: ComVisible(true)]
如下图
8、 项目右键—属性、或者双击“Properties”节点,进入到项目属性设置界面
8.1、选择“应用程序”选项卡,点击“程序集信息”按钮,如下图
8.2、勾选“使程序集COM可见”,确定。如下图
8.3、选择“生成”选项卡,在底部“输出”栏目下,勾选“为COM互操作注册”。如下图
8.4、选择“签名”选项卡。
8.4.1、勾选“为程序集签名”;
8.4.2、在“选择强名称密钥文件”的下拉框选择“<新建…>”
8.4.3、在“密钥文件名称”输入:HK.NetPBDemo.snk(任意命名,snk后缀即可)
8.4.4、去掉“使用密码保护密钥文件”,确定。
【8.4.3、8.4.4】如下图
9、 编译项目。
10、 打开vs指令窗,如下图
11、 运行指令:
gacutil /i DLL路径\HK.NetPBDemo.dll 将这个DLL加入的全局缓存里
regasm DLL路径\HK.NetPBDemo.dll 注册这个dll
如下图
附:以上11个步骤即可完成COM组件在本机的环境下注册并提供调用。
1、 若要在其他机器使用必须把编译的“DLL”、“TLB”文件一并复制在目标机器(已安装.Net Framework环境)并放在需调用的程序根目录;
2、 在目标机器“c:\WINDOWS\Microsoft.Net\Framework\v4.0.3.319”下找到“RegAsm.exe”,该路径是我的安装路径,如果没有就搜索下“RegAsm.exe”这个东东吧。【我的环境:虚拟机、系统WindowsXP、.Net Framework 4.0】
3、 运行CMD打开指令窗,讲路径定位到“c:\WINDOWS\Microsoft.Net\Framework\v4.0.3.319”,
运行指令:regasm.exe DLL路径\ HK.NetPBDemo.dll。 如下图【注册成功】
二、DELPHI调用
1、 打开Delphi7,File—Close All
2、 Project—Import Type Library,点击“Add”按钮选中刚才编译后的“tlb”COM文件【HK.NetPBDemo.tlb】点击“Create Unit”如下图
3、 Project—Import Type Library,在列表中选中刚才添加的组件,点击“Install..”按钮。
如下图
4、 File—New—Application,添加一个button按钮,然后在“ActiveX”选项卡选择刚才添加的组件,添加至项目。如下图
5、 Delphi 关键代码
Button1、HKTest1 均为自动生成对象,只要在Button的OnClick事件即可实现COM方法
procedure TForm1.Button1Click(Sender: TObject);
var
rst:Integer;
int:Integer;
str1:string;
str2:string;
db:Double;
begin
int:=;
str1:='这是恒康提供COM组件调用例子';
str2:='该例子用的是Delphi调用';
db:=2.8;
rst:=HKTest1.TestFunction(int,str1,str2,db);
showmessage(inttostr(rst));
end;
引用别人的例子:Demo下载
C#开发COM组件供其他开发环境或工具调用介绍(转)的更多相关文章
- C# 开发COM组件供c++使用
C# 开发COM组件供c++使用 Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用 ...
- 一款PHP环境整合工具—VertrigoServ介绍
Vertrigo简介 VertrigoServ 是一个Windows平台下的非常专业的.易于安装的免费网络开发环境,它集成了Apache, PHP, MySQL, SQLite, SQLiteMana ...
- iOS开发之组件化架构漫谈
前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...
- Agile.Net 组件式开发平台 - 组件开发示例
所谓组件式开发平台,它所有的功能模块都是以组件的形式扩展的,下面我来演示一个简单的组件开发例程. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina. ...
- AI应用开发实战 - 从零开始搭建macOS开发环境
AI应用开发实战 - 从零开始搭建macOS开发环境 本视频配套的视频教程请访问:https://www.bilibili.com/video/av24368929/ 建议和反馈,请发送到 https ...
- Gulp安装及配合组件构建前端开发一体化(转)
Gulp安装及配合组件构建前端开发一体化 所有功能前提需要安装nodejs(本人安装版本v0.10.26)和ruby(本人安装版本1.9.3p484). Gulp 是一款基于任务的设计模式的自动化工具 ...
- 吴裕雄--天生自然Android开发学习:1.2 开发环境搭建
现在主流的Android开发环境有: ①Eclipse + ADT + SDK ②Android Studio + SDK ③IntelliJ IDEA + SDK 现在国内大部分开发人员还是使用的E ...
- PHP开发环境搭建工具有哪些?
对于php开发小白来说搭建一个php运行环境就是一道坎! 因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境,一 ...
- 痞子衡嵌入式:把玩i.MXRT1062 TencentOS Tiny EVB_AIoT开发板(1) - 开发环境搭建与点灯
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1062 TencentOS Tiny EVB_AIoT开发板环境搭建与点灯. 腾讯 TencentOS 团队于2021年1 ...
随机推荐
- Oracle数据库——体系结构
一.涉及内容 1.了解数据库的物理存储结构和逻辑存储结构 二.具体操作 1.分别使用SQL 命令和OEM 图形化工具查看本地数据库的物理文件,并使用OEM 工具在现有的users 表空间中添加user ...
- OSPF(Open Shortest Path First开放式最短路径优先 -链路状态路由协议
OSPF分为OSPFv2和OSPFv3两个版本,其中OSPFv2用在IPv4网络,OSPFv3用在IPv6网络 思科OSPF的协议管理距离(AD)是110,华为OSPF的协议管理距离是10 通告网络接 ...
- 【转】纯CSS设置Checkbox复选框控件的样式
Checkbox复选框是一个可能每一个网站都在使用的HTML元素,但大多数人并不给它们设置样式,所以在绝大多数网站它们看起来是一样的.为什么不把你的网站中的Checkbox设置一个与众不同的样式,甚至 ...
- MVC2、MVC3、MVC4、MVC5之间的区别 以及Entity Framework 6 Code First using MVC 5官方介绍教程
现在MVC的技术日趋成熟,面对着不同版本的MVC大家不免有所迷惑 -- 它们之间有什么不同呢?下面我把我搜集的信息汇总一下,以便大家能更好的认识不同版本MVC的功能,也便于自己查阅. View Eng ...
- android 实现拍照的2种方法
android系统的照相功能,已实现2种方法,可供大家参考: 1.调用系统摄像头来拍照 首先,找到AndroidManifest.xml文件里加入用户权限 <uses-permission an ...
- ajax简单案例:字符串返回类型
小知识点: implode("^",$v) 拼数组为字符串, split/explode("|") 拆字符串为数组; "你好"-> ...
- 【shell】sort命令
[root@andon ~]# sort 1 ##常用正序自动排序 101 paul 18 100 102 suan 11 99 103 peter 18 98 id name age score [ ...
- AngularJs中的directives(指令part1)
一.指令的职责 指令的职责是修改DOM结构,并将作用域和DOM连接起来.即指令既要操作DOM,将作用域内的数据绑定到DOM节点上,又要为DOM绑定事件调用作用域内的对应的方法. 二.创建自定义指令 ...
- 【KVM】Ubuntu14.04 安装KVM
1. 首先检查系统是否支持CPU虚拟化 # egrep -o "svm|vmx" /proc/cpuinfo 若显示如下类似信息,则说明支持CPU虚拟化 vmx vmx ... v ...
- CentOS 7.0 安装中文输入法
这是个蛋疼的问题 1.Applications -- System Tools -- Setting -- Regin & Language 2.input source -- + -- mo ...