欢迎来到天天文库
浏览记录
ID:38140330
大小:14.07 KB
页数:3页
时间:2019-05-28
《VC调用C#的COM组件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、一、新建一个VisualC#工程(习惯这种叫法了,现在应该叫解决方案),选择类型“类库”;我就叫MyCom吧。二、编写导出接口。如下:[Guid("154BD6A6-5AB8-4d7d-A343-0A68AB79470B")]publicinterfaceMyCom_Interface{[DispId(1)]intAdd(inta,intb);}Guid为全局唯一标识,可以用VS2008的命令提示符中输入:guidgen就会出来它的窗口。在几个复选框选择最后一个RegistryFormat,点击NewGuid,然后COPY就行了(以下如有guid的字符串,全部同样操作)[DispId(1
2、)]为函数的标识。如果有多个函数可相应的在函数前面加[DispId(2)],[DispId(3)]…三、创建事件接口。[Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]publicinterfaceMyCom_Events{}Guid同二,不多说InterfaceType表求向COM公开的方式,这里选择为以调度的方式向COM公开。四、创建具体类:[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),Cla
3、ssInterface(ClassInterfaceType.None),ComSourceInterfaces(typeof(MyCom_Events))]publicclassClass1:MyCom_Interface{publicintAdd(inta,intb){returna+b;}}后面来有常常被忽略的步骤,先把整体代码放在下面(注意引用InteropServices):usingSystem;usingSystem.Runtime.InteropServices;usingSystem.Text;namespaceMyCom{[Guid("154BD6A6-5AB8-4d
4、7d-A343-0A68AB79470B")]publicinterfaceMyCom_Interface{[DispId(1)]intAdd(inta,intb);}[Guid("D11FEA37-AC57-4d39-9522-E49C4F9826BB"),InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]publicinterfaceMyCom_Events{}[Guid("2E3C7BAD-1051-4622-9C4C-215182C6BF58"),ClassInterface(ClassInterfaceType.None)
5、,ComSourceInterfaces(typeof(MyCom_Events))]publicclassClass1:MyCom_Interface{publicintAdd(inta,intb){returna+b;}}}五、大家都知道COM是需要注册的。注册时要加密钥文件.SNK。这一部就是生成SNK文件。进入VS2008命令提示符。用命令:sn–kMyCom.snk回车。我的在E:vs2008vc下面就生成了一个(MyCom.snk)的文件。(你们可以根据自己的命令提示符所在的文件目录下去找)。然后把它COPY到你的工程根目录下。六、打开AssemblyInfo.cs。在里
6、面加入[assembly:AssemblyKeyFile("MyCom.snk")]七、(1)项目属性->应用程序->程序集信息->选中“使程序集COM可见”。(2)项目属性->生成->选中“为COM互操作注册”。八、生成。如果在Debug下有一个MyCom.tlb,那你就成功了(肯定还有MyCom.dll)要此tlb文件是为了在VC6.0里面测试。九、在VC里面建一个MFC对话框程序(当然Console程序也一样,我为了看着方便)。建好后,把刚刚生成的MyCom.tlb拷到你的根目录下。十、选在代码里加入#import"MyCom.tlb",然后编写测试代码,如下:voidCTestD
7、lg::OnButton1(){CoInitialize(NULL);//注意初始化MyCom::MyCom_InterfacePtrp(__uuidof(MyCom::Class1));//创建智能指针MyCom::MyCom_Interface*s=p;inta=3;intb=6;intc=s->Add(a,b);CStringstr;str.Format("%d",c);MessageBox(str);}当弹出一个9,就说明你
此文档下载收益归作者所有