3__从C++ 到COM.pptVIP

  1. 1、本文档共50页,可阅读全部内容。
  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文档。上传文档
查看更多
3__从C到COM

三. 从C++到COM 源代码形式的重用 动态链接库 接口类与实现类的分离 抽象基类作为二进制接口 实现方式 内存泄漏 接口类与实现类的内存结构 对象的扩展性 功能扩展的需求 方法一:扩展接口 方法二:多接口 中性的类型转换 资源管理 1 源代码形式的重用 C++的一个主要目标:用户自定义类型UDT并且可以在其他环境下重用。 类库市场 OWL MFC ATL VCL Qt 主要问题: 白盒子,客户程序和类库之间过度的耦合 重用性的主要障碍 编译与链接模型 以下各节将演示C++的对象模型在“构造可重用的组件”时所遇到的挑战. 一个例子:某库厂商开发一个算法,能在常时间内进行子串的查找工作。特点是其查找时间与目的串的长度无关。 该厂商创建了一个字符串类。为此,他生成了一个头文件和一个实现文件: //faststring.h class FastString{ char * m_psz; //保存原始的字符串 public: FastString(const char*psz); //构造函数 ~FastString(void); int Length(void)const; //返回该字符串的长度 int Find(const char*psz)const; //查找指定的子串 }; //faststring.cpp #include faststring.h #includestring.h FastString::FastString(const char* psz) :m_psz(new char[strlen(psz)+1]) {strcpy(m_psz,psz);} //分配内存 FastString::~FastString(void) { delete []m_psz;} //释放内存 int FastString::Length(void) const{ return strlen(m_psz);} //计算长度 int FastString::Find(const char*psz)const {;} //省略, 这不是我们讨论的重点. 客户使用方法 在客户应用中包含faststring.h faststring.cpp #include faststring.h void f() { FastString *pFS=new FastString(“fdgggdf”); ...... } 缺陷:模块化特征消失殆尽 无法更新,升级,除非代码更换 代码更新后必须重新编译 所有的技术公开。 2 动态链接库 静态链接 许多类库的做法 编译时刻的链接 静态链接的缺点 代码重复:多个程序各有自己的代码,需要更多的内存 客户程序占据更多的外存空间 库代码更新需要重新编译所有的客户程序 动态链接 运行时刻的链接 动态链接形式 编译时刻通过引入库 运行时刻完全动态 使用动态链接库的方式可以解决上述问题 把FastString的所有方法从DLL中引出去 //faststring.h Class __declspec(dllexport) FastString // __declspec(dllexport) 是C++编译器指示符, 它通知编译器, 此类的所有成员方法都将对外输出.以下代码见FastStringDLL { char * m_psz; public: FastString(const char*psz); ~FastString(void); int Length(void)const; int Find(const char*psz)const; } FastString的所有方法都将被加载到dll的引出表中。允许在运行时把每个方法的名字解析到内存中对应的地址。 链接器产生一个引入库 (import library),这个库暴露了FastString成员的符号,并没有包含实际的代码,它只是简单地包含一些引用,这些引用指向dll的文件名和被引出的符号的名字。当客户链接引入库时,有一些存根会被加入到可执行文件中,它在运行时通知装载器装载dll并且把所有被引入的符号解析到内存中相应的位置上。 客户的使用方法(VC环境下): 静态加载 1.#include FastStringDLL.h 2. Setting - link-加入 FastStringDll.Lib(VC6) 项目-》属性-》配置属性-》链接器-》输入-》附加依赖项 加入FastStringDll.Lib(VS.NET) 3。FastStringDll。Dll放在可访问的路径中,特别地,放在一起。 4。代码:

文档评论(0)

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

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

1亿VIP精品文档

相关文档