原文地址 http://dearymz.blog.163.com/blog/static/2056574201191295525523/
感谢原作者分享
从C#创建COM,再到C++调用COM。 适合入门及快速应用。
但是环境要求没有介绍,不清楚此发布的COM是否需要调用客户机有framework环境。
写COM调用,是由于写DLL,C++必须使用CLR编译。
===========================================以下正文==============================================================
C#编写COM组件:
1.创建一个C#的dll类库
MyInterop:
2.将打开项目属性页面,打开“应用程序/程序集信息”,选中“使程序集COM可见”。这样编译好的C# dll将支持通过COM的形式访问。


4.在“签名”属性页面,选中“为程序集签名”,点击新建

5.在弹出的“创建强名称密钥”对话框中输入适当的密钥文件名称,并取消“使用密码保护密钥文件”的选项

6.“确定”后会自动创建一个
snk文件的密钥文件,用于给程序集签名。

7.经过以上繁杂的设置,可以果断编译。
8.若发现以下编译错误,说明COM注册的权限不足。请以管理员身份重新打开VS:
“error MSB3216: 无法注册程序集“***.dll”- 拒绝访问。请确保您正在以管理员身份运行应用程序。对注册表项“HKEY_CLASSES_ROOT\***”的访问被拒绝。”

9.成功编译后,生成的dll就会顺利注册为COM组件,以图为证:

10.然后请将以下代码输入到项目中(鉴于排版视觉效果,本文代码采用截图而非文本。在VS强大的自动提示下手工代码相信会很容易):
11.其中的
Guid可以通过以下方式生成/拷贝:

12.再次编译,并可在“
MyInterop\bin\Debug”目录下发现多生成一个“
MyInterop.tlb”文件。至此,C#的COM组件创建完毕。
C++调用COM组件:
1.创建一个C++ Win32 控制台应用程序
Call_CSharp_COM
2.在
Call_CSharp_COM.cpp中输入以下代码:
3.编译,运行:

补充:
本文详细介绍如何使用C#创建COM组件并将其注册为可被其他语言调用的形式,同时提供了C++调用该COM组件的具体步骤。文章还介绍了与.NET程序集相关的部署和注册命令。

2286

被折叠的 条评论
为什么被折叠?



