COM技术初探[精].docVIP

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COM技术初探[精]

COM技术初探 目录 一 COM 是一个更好的C++ ?? 1. COM 是什么?? 2. 从 C++ 到 DLL 再到 COM??????2.1 C++ ??????2.2 DLL ??????2.3 COM 二COM基础? 1. COM基本知识??????1.1 返回值HRESULT??????1.2 初识idl??????1.3 IUnkown接口?? 2. 一个比较简单的COM??????2.1 interface.h文件??????2.2 math.h文件??????2.3 math.cpp文件??????2.4 simple.cpp文件??????2.5 Math组件的二进制结构图??????2.6 小结三、纯手工创建一个COM组件???1. 从建工程到实现注册?????1.1 创建一个类型为win32 dll工程?????1.2 定义接口文件?????1.3 增加注册功能??????1.3.1 增加一个MathCOM.def文件??????1.3.2 DllRegisterServer()和DllUnregisterServer() ?????1.4 MathCOM.cpp文件?????1.5 小结???2. 实现ISmipleMath,IAdvancedMath接口和DllGetClassObject()?????2.1 实现ISmipleMath和IAdvancedMath接口2.1.1 Math.h文件 2.1.2 Math.cpp文件 ?????2.2 COM组件调入大致过程?????2.3 DllGetClassObject()实现?????2.4 客户端?????2.5 小结???3. 类厂3.1 回顾 3.2 增加IClassFactory的实现 3.2.1 MathCOM.cpp 3.2.2 MathFactory.h 3.2.3 MathFactory.cpp 3.2.4 Main.cpp 3.3 小结 4 实现派发接口(IDispatch) 4.1 IDispathc接口 4.2 支持派发接口的MathCOM组件 4.2.1 修改MathCOM.idl 4.2.2 修改math.h文件 4.2.3 修改math.cpp文件 四 总结 五 参考资料 附录 A 我对dll的一点认识一. 没有lib的dll???1.1 建一个没有lib的dll???1.2 调试没有lib的dll二. 带有lib的dll???2.1 创建一个带有lib的dll???2.2 调试带有引用但没有头文件的dll三. 带有头文件的dll???3.1 创建一个带有引出信息头文件的dll???3.2 调试带有头文件的dll四. 小结一、COM是一个更好的C++1、COM 是什么Don Box 说COM IS LOVE。COM 的全称是 Component Object Model 组件对象模型。2、从 C++ 到 DLL 再到 COM2.1 C++ 如某一软件厂商发布一个类库(CMath四则运算),此时类库的可执行代码将成为客户应用中不可分割的一部分。假设此类库的所产生的机器码在目标可执行文件中占有4MB的空间。当三个应用程序都使用CMath库时,那么每个可执行文件都包含4MB的类库代码(见图1.1)。当三个应用程序共同运行时,他们将会占用12MB的虚拟内存。问题还远不于此。一旦类库厂商发现CMath类库有一个缺陷后,发布一个新的类库,此时需要要求所有运用此类库的应用程序。此外别无他法了。 图1.1 CMath 的三个客户 2.2 DLL 解决上面问题的一个技术是将CMath类做成动态链接库(DLL ,Dynamic Link Library)的形式封装起来 。在使用这项技术的时候,CMath的所有方法都将被加到 CMath dll 的引出表(export list)中,而且链接器将会产生一个引入库(import library)。这个库暴露了CMath的方法成员的符号 。当客户链接引入库时,有一些存根会被引入到可执行文件中,它在运行时通知装载器动态装载 CMath Dll。当 CMath 位于dll中时,他的运行模型见图1.2 图1.2 CMath引入库2.3 COM 简单地把C++类定义从dll中引出来这种方案并不能提供合理的二进制组件结构。因为C++类那既是接口也是实现。这里需要把接口从实现中分离出来才能提供二进制组件结构。此时需要有二个C++类,一个作为接口类另一个作为实现类。让我们开始COM之旅吧。二、COM基础COM基本知识返回值HRESULTCOM要求所有的方法都会返回一个HRESULT类型的错误号。HRESULT 其

文档评论(0)

dart002 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档