


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本文详细阐述如何用C#创立COM组件,并能用VC6.0等调用.并附有完整测试通过的代码.该功能总体看来很简单.可是我在第一次用C#做COM的时候,痛不欲生.由于很少有人写这类文章.而且就算有代码也是乱帖.根本是让人误入歧途.后来在C#help上面看一个老外写的文章(上面有一个完整的SQLSERVER实例),才完成该功能.拿来分享.开发工具:VS2021VS2021命令提示符(呵呵,这个你应该可以找到在什么地方吧)附:本文适用任何VS系列工具.在用C#创立COM组件时,一定要记住以下几点:1:所要导出的类必须为公有;2:所有属性、方法也必须为公有;3:要导出的属性、方法必须用接口方式;如果没有在
2、接口中声明,即使该方法(属性)为公有,也不能正常导出到COM.但他们可以被别的.NET程序所使用;4:所有的事件也必须用接口方式;现在我们开始正题:一、新建一个VisualC#工程(习惯这种叫法了,现在应该叫解决方案),选择类型类库;我就叫MyCom吧.二、编写导出接口.为了大家理解方便,我仅一加法操作举例.如下:1.Guid(154BD6A6-5AB8-4d7d-A343-0A68AB79470B)2.publicinterfaceMyCom_Interface3.4.DispId(1)5.intAdd(inta,intb);6.Guid为全局唯一标识,可以用VS2021的命令提示符中输入:
3、guidgen就会出来它的窗口.在几个复选框选择最后一个RegistryFormat,点击NewGuid,然后COPY就行了(以下如有guid的字符串,全部同样操作)DispId(1)为函数的标识.如果有多个函数可相应的在函数前面加DispId(2),DispId(3)三、创立事件接口.1.Guid(D11FEA37-AC57-4d39-9522-E49C4F9826BB),2.InterfaceType(ComlnterfaceType.InterfacelsIDispatch)3.publicinterfaceMyCom_Events4.5.Guid同二,不多说InterfaceType表
4、求向COM公开的方式,这里选择为以调度的方式向COM公开.四、创立具体类:1.Guid(2E3c7BAD-1051-4622-9C4C-215182c6BF58),2.ClassInterface(ClassInterfaceType.None),3.ComSourceInterfaces(typeof(MyCom_Events)4.publicclassClass1:MyCom_Interface5.6.publicintAdd(inta,intb)7.8.returna+b;9.10.至此,代码完毕.很简单吧.别急,后面来有常常被忽略的步骤,先把整体代码放在下面(注意引用InteropSe
5、rvices):1.usingSystem;2.using;3.usingSystem.Text;4.namespaceMyCom5.6.Guid(154BD6A6-5AB8-4d7d-A343-0A68AB79470B)7.publicinterfaceMyCom_Interface8.9.DispId(1)10.intAdd(inta,intb);11.12.Guid(D11FEA37-AC57-4d39-9522-E49C4F9826BB),13.InterfaceType(ComInterfaceType.InterfaceIsIDispatch)14.publicinterfaceM
6、yCom_Events15.16.17.Guid(2E3c7BAD-1051-4622-9C4C-215182c6BF58),18.ClassInterface(ClassInterfaceType.None),19.ComSourceInterfaces(typeof(MyCom_Events)20.publicclassClass1:MyCom_Interface21.22.publicintAdd(inta,intb)23.24.returna+b;25.26.27.五、 大家都知道COM是需要注册的.注册时要加密钥文件.SNK.这一部就是生成SNK文件.进入VS2021命令提示符.用命
7、令:sn*MyCom.snk回车.我的在E:vs2021vc下面就生成了一个(MyCom.snk)的文件.(你们可以根据自己的命令提示符所在的文件目录下去找).然后把它COPY到你的工程根目录下.六、翻开AssemblyInfo.cs.在里面参加assembly:AssemblyKeyFile(MyCom.snk)七、工程属性-应用程序-程序集信息-选中使程序集COM可见.(2)工程属性-生成-选中为COM互操作注册.八、生成.如果在Debug下有一个MyCom.tlb,那你就成功了(肯定还有MyCom.dll)要此tlb文件是为了在VC6.0里面测试.九、在VC里面建一个MFC对话框程序(当然Console程序也一样,我为了看着方便).建好后,把刚刚生成的MyCom.tlb拷到你的根目录下.十、选在代码里参加#importMyCom.tlb,然后编写核心测试代码:(我是在一个Button1按钮里面添加的),如下:1.voidCTestDlg:OnButton1()2.3.Colnitialize(NULL);/注意初始化4.MyCom:MyCom_InterfacePtrp(_uuidof(MyCom:Class1);/创立智能指针5.MyCom:MyCom_Interface
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年园林陶瓷项目可行性研究报告
- 网吧视频监控卡行业行业发展趋势及投资战略研究分析报告
- 2025年中国止咳用药行业市场发展监测及投资潜力预测报告
- 平板模切刀行业行业发展趋势及投资战略研究分析报告
- 2025年在线气体分析仪市场环境分析
- 镀或涂铝平板轧材项目可行性研究报告申请立项
- 2025年中国芦笋罐头市场全面调研及行业投资潜力预测报告
- 《安徽地域文化》作业1
- 2024年高效能复合外墙外保温材料项目安全调研评估报告
- 合伙联营合同范本
- 2025年度养老服务机构场地租赁合同及养老服务协议
- 贵州省情知识考试题库500题(含答案)
- 大学生家长陪读承诺书
- 安全生产事故调查与案例分析(第3版)课件 吕淑然 第5章 事故案例评析
- 2023版交安A、B、C证考试题库含答案
- 楼梯 栏杆 栏板(一)22J403-1
- 劳动法培训课件
- 2024-2025学年成都市成华区七年级上英语期末考试题(含答案)
- 2024年05月青海青海省农商银行(农信社)系统招考专业人才笔试历年参考题库附带答案详解
- 2025年山西杏花村汾酒集团限责任公司人才招聘71名高频重点提升(共500题)附带答案详解
- 2025年江苏省环保集团招聘笔试参考题库含答案解析
评论
0/150
提交评论