C++调用C# COM组件
来源:互联网 发布:管家婆数据库搬移工具 编辑:程序博客网 时间:2024/04/25 23:35
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.编译,运行:
补充:
- 以上demo并未将.net dll部署到GAC,可以通过命令“gacutil /i MyInterop.dll”进行GAC部署操作。只有经过强名称签名的.net程序集可以顺利部署到GAC,这也是demo中选择对程序集签名的原因。没有经过强名称签名的程序集也可以“私有部署”到exe所在的目录或符合dll搜索顺序的路径中。
- COM注册也可以通过命令“REGASM MyInterop.dll /tlb:MyInterop.tlb”进行,同样需要管理员身份
- 用C++以COM调用C#比预想的简单多了
参考:
Calling Managed .NET C# COM Objects from Unmanaged C++ Code
tlb、tlh和tli文件的关系
转自:http://dearymz.blog.163.com/blog/static/2056574201191295525523/
0 0
- C#调用C++COM组件
- 编写C++C#相互调用COM组件
- C#调用COM组件
- c# 中调用COM组件
- C++调用C# COM组件
- C++调用C# COM组件
- C++调用C# com组件
- C++调用C# COM组件
- VC调用C#写的COM+组件
- VC调用C#写的COM+组件
- C# 实现调用 SAP Com组件
- C++和C#编写调用COM组件
- C# 实现调用 SAP Com组件
- C# 中实现调用 SAP Com组件
- C++和C#编写调用COM组件
- C++和C#编写调用COM组件
- VC调用C#的COM组件(DLL)
- VC调用C#写的COM组件
- 思科telnet配置
- Reachability 网络连接
- android L arm64 kernel image压缩、解压
- MFC获取系统的进程及列表控件使用
- Java学习(十)基本数据类型的包装类
- C++调用C# COM组件
- IP路由选择过程
- 接管微信平台验证
- 第十二周 项目3:(1)编写递归函数求n的阶乘
- 简单的裸机makefile工程
- 大型网站架构演变和知识体系
- python执行系统命令并取得输出内容
- 第十二周项目银行系统1
- Mac X 搭建 IOS 越狱开发环境