一个基础的COM实现.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个基础的COM实现 目录 一、 术语定义 二、 接口模型 三、 对象模型 1、 部件的规格 2、 部件实例的创建与部件的标识 四、 部件的定义和实现 1、 基础部件 2、 Getlnterface 机制 3、 Createlnstance Destroylnstance 机制 五、 模型使用规范及示例 1、 定义接口 2、 定义及实现部件 3、 部件的引用 4、 部件的跨动态联接库使用 一、 术语定义 接口: 一组函数(方法和属性)的组合。可用C++的纯虚类表示。 部件:实现若干接口的部件,相当于传统面向对象屮类的概念。 类:用来定义和实现部件的c卄类。 实例:部件所创建的单个实体,相当于传统面向对象中对象的概念。 二、 接口模型 接口模型的主要内容定义于v Posyinterface.h>中。 接口模型包括,接口标识INN、基础接口 IBase当前定义如下: typedef unsigned long INN; // for Interface IDs #define 1NTF class //for Interface Definition static const INN IN_IBase = 0; INTF IBase { public: GetInterface(INN inlD, void** pplntf) = 0;GetObject(void** ppObj) = 0; GetInterface(INN inlD, void** pplntf) = 0; GetObject(void** ppObj) = 0; Destroylnstance() = 0; virtual BOOL virtual BOOL }; IBase标识号为0。包含三个函数:Getlnterface用于获取指定ID的接口; GetObject用于获 取实现该接口的部件实例;DestroyObject用于销毁实现该接口的部件实例。 所有接口都必须继承IBase接II,并实现其成员函数。还需定义一个唯一的接口标识一般命 名为 IN」nterfaceNameo 三、对象模型 对喙模型的主要内容定义于v PosyObject.h>中。 1、部件的规格 每一个部件必须至少实现IBase接口。并实现规定的特征。一个标准的部件原型如卜\ class CPosyObject { protected: CPosyObjcct(){}; virtual -CPosyObject(){}; public: static BOOL Createlnstance (void** ppObj); static BOOL Createlnstance (INN inlD, void** pplntf); 部件的构造函数与析构函数不为Public,以禁止部件实例被直接创建。 部件具有两个Createlnstance静态函数,川于创建部件实例。其屮一个可直接获取指向部件 实例的指针,另一个可获取指定接口的接口指针。但一般并不允许肓接调用这两个函数。 2、部件实例的创建与部件的标识 部件的客户至少可以分为两利U -种具有定义部件的类的访问权,这种客户可以直接调用部 件的Createlnstance成员隊[数來创建实例;另一种无法収得部件的定义(即不包含定义class 的头文件),这时必须通过部件标识來创建部件实例。 标准的部件使用者一般通过对彖模烈的基础服务ObjSew的静态成员函数Createlnstance来 创建实例。该函数需给出部件标识,然后返回指定接口的指针。 部件标识即为部件的第二个Createlnstance静态成员函数的地址。部件标识的定义为: typedef BOOL (*OBN)(INN, void**); 命名一般为 ON_ObjcctNamc。 使用如下: OBN ON_PosyObject = (CposyObject::CreateInstance); ? ? ? I Base *pIBase = NULL; If (ObjServ::CreateInstance(ON_PosyObject, IN」Base, (void**)pIBase)) { ? ? ? pIBase-DestroyInstance(); 这种方法可以在不暴露部件类具体实现的悄况下提供创建部件实例的能力。 四、部件的定义和实现 部件定义与实现的辅助服务主要定义于BaseObject.hHo这种辅助服务是可选的。 1、基础部件 部件定义与实现主要借助基础部件BaseObject和一套辅助宏來实现。 基于这套辅助服务的部件一般直接或间接继承于BaseObject,并同时继承所需实现的接口。 BaseObject定义如卜: class CBascObjcct: publi

文档评论(0)

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

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

1亿VIP精品文档

相关文档