C++调用C# COM组件

C#编写COM组件:

1.创建一个C#dll类库MyInterop

2.将打开项目属性页面,打开应用程序/程序集信息,选中使程序集COM可见。这样编译好的C# dll将支持通过COM的形式访问。

 

3.生成属性页面,选中COM互操作注册。这样项目编译后会自动将生成的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.编译,运行:

 

 

补充:

1.   以上demo并未将.net dll部署到GAC,可以通过命令“gacutil /i MyInterop.dll进行GAC部署操作。只有经过强名称签名的.net程序集可以顺利部署到GAC,这也是demo中选择对程序集签名的原因。没有经过强名称签名的程序集也可以私有部署exe所在的目录或符合dll搜索顺序的路径中。

2.   COM注册也可以通过命令“REGASM MyInterop.dll /tlb:MyInterop.tlb进行,同样需要管理员身份

3.   C++COM调用C#比预想的简单多了

   转载自:http://dearymz.blog.163.com/blog/static/2056574201191295525523/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值