用C#创建COM组件全过程.doc

上传人:大米 文档编号:559291809 上传时间:2022-10-04 格式:DOC 页数:5 大小:48.01KB
返回 下载 相关 举报
用C#创建COM组件全过程.doc_第1页
第1页 / 共5页
用C#创建COM组件全过程.doc_第2页
第2页 / 共5页
用C#创建COM组件全过程.doc_第3页
第3页 / 共5页
用C#创建COM组件全过程.doc_第4页
第4页 / 共5页
用C#创建COM组件全过程.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《用C#创建COM组件全过程.doc》由会员分享,可在线阅读,更多相关《用C#创建COM组件全过程.doc(5页珍藏版)》请在金锄头文库上搜索。

1、本文详细阐述如何用C#创建COM组件,并能用VC6.0等调用。并附有完整测试通过的代码。该功能总体看来很简单。可是我在第一次用C#做COM的时候,痛不欲生。因为很少有人写这类文章。而且就算有代码也是乱帖。根本是让人误入歧途。后来在C# help上面看一个老外写的文章 (上面有一个完整的SQL SERVER实例),才完成该功能。拿来分享。开发工具:VS2008VS2008命令提示符(呵呵,这个你应该可以找到在什么地方吧)附:本文适用任何VS系列工具。在用C#创建COM组件时,一定要记住以下几点:1:所要导出的类必须为公有;2:所有属性、方法也必须为公有;3:要导出的属性、方法必须用接口方式;如果

2、没有在接口中声明,即使该方法(属性)为公有,也不能正常导出到COM。但他们可以被别的.NET程序所使用;4:所有的事件也必须用接口方式;现在我们开始正题:一、新建一个Visual C#工程(习惯这种叫法了,现在应该叫解决方案),选择类型“类库”;我就叫MyCom吧。二、编写导出接口。为了大家理解方便,我仅一加法操作举例。如下:1. Guid(154BD6A6-5AB8-4d7d-A343-0A68AB79470B) 2. 3. publicinterfaceMyCom_Interface 4. 5. 6. 7. DispId(1) 8. 9. intAdd(inta,intb); 10. 11

3、. Guid为全局唯一标识,可以用VS2008的命令提示符中输入:guidgen 就会出来它的窗口。在几个复选框选择最后一个Registry Format,点击New Guid,然后COPY就行了(以下如有guid的字符串,全部同样操作)DispId(1)为函数的标识。如果有多个函数可相应的在函数前面加DispId(2), DispId(3)三、创建事件接口。1. Guid(D11FEA37-AC57-4d39-9522-E49C4F9826BB), 2. 3. InterfaceType(ComInterfaceType.InterfaceIsIDispatch) 4. 5. publici

4、nterfaceMyCom_Events 6. 7. 8. 9. Guid同二,不多说InterfaceType表求向COM公开的方式,这里选择为以调度的方式向COM公开。四、 创建具体类:1. Guid(2E3C7BAD-1051-4622-9C4C-215182C6BF58), 2. 3. ClassInterface(ClassInterfaceType.None), 4. 5. ComSourceInterfaces(typeof(MyCom_Events) 6. 7. publicclassClass1:MyCom_Interface 8. 9. 10. 11. publicintA

5、dd(inta,intb) 12. 13. 14. 15. returna+b; 16. 17. 18. 19. 至此,代码完毕。很简单吧。别急,后面来有常常被忽略的步骤,先把整体代码放在下面(注意引用InteropServices):1. usingSystem; 2. 3. usingSystem.Runtime.InteropServices; 4. 5. usingSystem.Text; 6. 7. 8. 9. namespaceMyCom 10. 11. 12. 13. Guid(154BD6A6-5AB8-4d7d-A343-0A68AB79470B) 14. 15. publi

6、cinterfaceMyCom_Interface 16. 17. 18. 19. DispId(1) 20. 21. intAdd(inta,intb); 22. 23. 24. 25. 26. 27. Guid(D11FEA37-AC57-4d39-9522-E49C4F9826BB), 28. 29. InterfaceType(ComInterfaceType.InterfaceIsIDispatch) 30. 31. publicinterfaceMyCom_Events 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. Guid(2E3C7BAD-10

7、51-4622-9C4C-215182C6BF58), 42. 43. ClassInterface(ClassInterfaceType.None), 44. 45. ComSourceInterfaces(typeof(MyCom_Events) 46. 47. publicclassClass1:MyCom_Interface 48. 49. 50. 51. publicintAdd(inta,intb) 52. 53. 54. 55. returna+b; 56. 57. 58. 59. 60. 61. 五、大家都知道COM是需要注册的。注册时要加密钥文件.SNK。这一部就是生成SNK

8、文件。进入VS2008命令提示符。用命令:sn k MyCom.snk回车。我的在E:vs2008vc下面就生成了一个(MyCom.snk)的文件。(你们可以根据自己的命令提示符所在的文件目录下去找)。然后把它COPY到你的工程根目录下。六、打开AssemblyInfo.cs。在里面加入assembly:AssemblyKeyFile(MyCom.snk)七、(1)项目属性-应用程序-程序集信息-选中“使程序集COM可见”。(2)项目属性-生成-选中“为COM互操作注册”。八、生成。如果在Debug下有一个MyCom.tlb,那你就成功了(肯定还有MyCom.dll)要此tlb文件是为了在VC

9、6.0里面测试。九、在VC里面建一个MFC对话框程序(当然Console程序也一样,我为了看着方便)。建好后,把刚刚生成的MyCom.tlb拷到你的根目录下。十、选在代码里加入#import MyCom.tlb,然后编写核心测试代码:(我是在一个Button1按钮里面添加的),如下:1. voidCTestDlg:OnButton1() 2. 3. CoInitialize(NULL);/注意初始化 4. MyCom:MyCom_InterfacePtrp(_uuidof(MyCom:Class1);/创建智能指针 5. MyCom:MyCom_Interface*s=p; 6. inta=3; 7. intb=6; 8. intc=s-Add(a,b); 9. CStringstr; 10. str.Format(%d,c); 11. MessageBox(str); 12. 当弹出一个9,就说明你已经成功用C#创建COM组件了。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号