C# 开发COM组件供c++使用
C# 开发COM组件供c++使用
Microsoft在解决和以往的COM和SDK开发技术之间的互操作性(Interoperability)方面做了很多的工作,其中包括COM和.NET对象之间的相互调用以及.NET如何调用SDK中的Windows库函数。
本文在学习网上资料的基础上,实现用C#开发组件供C++使用的过程。
编程环境:vs2015 (COM组件) vs2005 c++调用 操作系统 win10
一.C#COM组件
1.新建一个C#类库项目:ExcelCom (原计划做一个EXCEL的com)
2.在项目中添加接口
C++调用com组件中所有的功能只能通过接口来调用,不能直接调用类或函数
Guid可通过 Tool -> 创建GUID产生
接口DoExcel的编写
public interface DoExcel { [DispId(1)] //如果需要添加其他函数,继续加 [DispId(2)] ... int Plus(int a, int b); }
3.添加一个ExcelOperate类继承接口DoExcel
using System.Runtime.InteropServices;
4. 修改AssemblyInfo.cs文件中[assembly: ComVisible(false)]
项目->属性->生成下 选中"为COM互操作注册“
5.生成解决方案
生成解决方案,成功才可。生成的文件ExcelCom.dll文件。
6.COM注册
COM 注册后才能使用。
注册过程:管理员身份运行cmd.进入C:\Windows\Microsoft.NET\Framework\v2.0.50727
注意:自己系统上安装的.net版本
输入”RegAsm D:\CAAProj\ExcelCom\ExcelCom\bin\Debug\ExcelCom.dll /tlb:ExcelCom.tlb /codebase“
COM卸载与注册过程基本相同,只需将命令改为
“RegAsm /u D:\CAAProj\ExcelCom\ExcelCom\bin\Debug\ExcelCom.dll /tlb: COMLib.tlb /codebase”
提示成功注册后,及可在C++上引用了(可在项目目录下是否成功生成了ExcelCom.tlb文件)
二.C++引用COM组件
1.新建一个C++程序(控制台程序即可),本例中是ExcelComDemo
2.将ExcelCom.tlb拷贝到ExcelComDemo下的ExcelComDemo文件中。
3.创建一个调用代码
#include "stdafx.h" #include <Windows.h> #include <string.h> #include <iostream> using namespace std; #import "ExcelCom.tlb" named_guids raw_interface_only int _tmain(int argc, _TCHAR* argv[]) { CoInitialize(NULL); ExcelCom::DoExcelPtr ptr; //接口 ptr.CreateInstance(ExcelCom::CLSID_ExcelOperate);//实例化一个类 CLSID_ 类名 long a = 1; long * lPtr = &a; long AA = ptr->Plus(1,2); cout<<AA<<endl; system("pause"); return 0; }
4.运行后执行结果如下: