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 关键代码

C#开发COM组件的更多相关文章

  1. iOS开发之组件化架构漫谈

    前段时间公司项目打算重构,准确来说应该是按之前的产品逻辑重写一个项目.在重构项目之前涉及到架构选型的问题,我和组里小伙伴一起研究了一下组件化架构,打算将项目重构为组件化架构.当然不是直接拿来照搬,还是 ...

  2. 使用OC开发phonegp 组件

    使用OC开发phonegp 组件 1. 使用oc 对phonegp中的组件近些开发,首先具体的pgonegp跟nativecode之间的一些优劣就不说了,开发phonegp 对应的组件主要就是使用na ...

  3. 【小程序】小程序开发自定义组件的步骤>>>>>>>>>小程序开发过程中报错:jsEnginScriptError

    报错:jsEnginScriptError VM6342: jsEnginScriptError Component is not found in path "component/spac ...

  4. web前端开发常用组件

    web前端开发常用组件 1. 对话框(dialog):jbox(适合对话框等其它功能).colorbox(也很强大,可以弥补jbox图片轮播的落点),      这二者基本能搞定所有对话框的情况 2. ...

  5. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 在WePY中实现了小程序的组件化开发,组件的所有业务与功能在组件本身实现,组件与组件之间彼此隔离,上述例子在WePY的组件化开发过程中,A组件只会影响到A所绑定的myclick

    wepyjs - 小程序组件化开发框架 https://tencent.github.io/wepy/document.html#/?id=%e5%be%ae%e4%bf%a1%e5%b0%8f%e7 ...

  7. C# 开发COM组件供c++使用

    C# 开发COM组件供c++使用 Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用 ...

  8. [DeviceOne开发]-do_LinearLayout组件使用技巧

    一.摘要 今天跟大家主要来介绍一下DeviceOne中的do_linearlayout这个布局,在DeviceOne开发中,do_linearlayout这个布局是相当重要. 现在给大家来总结一下. ...

  9. [js开源组件开发]query组件,获取url参数和form表单json格式

    query组件,获取url参数和form表单json格式 距离上次的组件[js开源组件开发]ajax分页组件一转眼过去了近二十天,或许我一周一组件的承诺有了质疑声,但其实我一直在做,只是没人看到……, ...

  10. BizTalk动手实验(十一)自定义开发管道组件

    1 课程简介 通过本课程熟悉自定义开始管道组件的流程.各组件接口的功能作用以及自定义管道. 本场景为开发一个消息ZIP压缩的发送管道组件. 2 准备工作 1. 熟悉管道组件各阶段组成 2. 下载Ion ...

随机推荐

  1. SQL Server2008 错误源:.net SqlClient data provider的解决方法

    今天下午直接在SQL Server 2008的Microsoft SQL Server Management Studio 中修改一张表中某个字段, 不管是删除字符还是添加都提示下面的错误. 网上很多 ...

  2. bootstrap, boosting, bagging 几种方法的联系

    http://blog.csdn.net/jlei_apple/article/details/8168856 这两天在看关于boosting算法时,看到一篇不错的文章讲bootstrap, jack ...

  3. 【crunch bang】中文美化

    原文连接:http://edyfox.codecarver.org/html/debian_testing_chinese.html 中文字体美化是个很讨厌的事情,无数初学者在这里面浪费了无数时间,做 ...

  4. Mac下好用的取色器 Sip

    总有很多东西,你只是望一眼就已经神魂颠倒.措施有这样的App做的真的是用心的很,养眼,触发你内心冲动的美感.先留下一个,备忘. 太精致了 操作简单,左上角的有心圆点击就可以在任何地方取色了,取色点会z ...

  5. ubuntu 修改终端命令显示的颜色

    转于  http://www.blogbus.com/riusksk-logs/62891140.html 修改当前用户 gedit ~/.bashrc 在最后一行下面添加这行 PS1='${debi ...

  6. wghd的git代码仓库分支管理说明【转】

    英文原文:http://www.nvie.com/posts/a-successful-git-branching-model/ 原文作者:Vincent Driessen 本文经Linux大棚博主总 ...

  7. crontab实现每秒执行

    crontab: #!/bin/bash step=$1 #每多少秒执行一次 ; i < ; i=(i+step) )); do date +%Y%m%d' '%H:%M:%S >> ...

  8. Docker第三方项目小结

    软件项目的成功常常根据其催生的生态系统来衡量.围绕或基于核心技术构建的项目增添了功能和易用性,它们常常日臻完善.Docker就是一个典例,有众多第三方项目扩展.补充或改进Docker. •Docker ...

  9. 浏览器检测navigator 对象

    1.浏览器及版本号不同的浏览器支持的功能.属性和方法各有不同.比如IE 和Firefox 显示的页面可能就会有所略微不同. alert('浏览器名称:' + navigator.appName); a ...

  10. 20145227《Java程序设计》第2次实验报告

    20145227<Java程序设计>第2次实验报告 实验步骤与内容 一.实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 ...