VC调用C#的COM组件

VC调用C#的COM组件

ID:38140330

大小:14.07 KB

页数:3页

时间:2019-05-28

VC调用C#的COM组件_第1页
VC调用C#的COM组件_第2页
VC调用C#的COM组件_第3页
资源描述:

《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,就说明你

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。