- 1、本文档共46页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章 创建COM客户和COM服务器
第2章 创建COM客户和COM服务器 主要内容 2.1 COM对象与COM接口 2.2 向Windows注册表注册COM服务器 2.3 用C++编写基本的COM客户程序 2.4 用C++编写基本的COM服务器程序 2.1 COM对象与COM接口 用于支持动态链接的COM要素 三种Server In - process out of process remote server 接口的概念 Interfaces are a logical definition. Interfaces are immutable. Interface notation. CLSID和ProgID CLSID 每个COM对象的类都必须有的唯一标识符 是一个128bit数,GUID类型。( Globally Unique Identifier ) 注册到系统registry的HKEY_CLASSES_ROOT\CLSID子键下 ProgID CLSID的友好名字 不保证唯一 通常形式:Library.type.version 注册到系统registry的HKEY_CLASSES_ROOT中相应子键下 CLSID和ProgID Conversion Macros 2.2 注册COM服务器 演示注册SimpleServer 查看注册表,验证注册地址正确 2.3 用C++编写基本的COM客户程序 一、COM客户程序工程 用MFC AppWizard(exe)建一个dialog-based的应用程序 提供OLE的支持 注意在StdAfx.h中包含 #include objbase.h //组件模型定义 Project settings中,Link Tab,在Object/library modules下,加入了Ole32.lib 二、编写客户程序的主要步骤 1、初始化COM库 2、获取COM对象的CLSID 3、创建COM对象实例 4、使用COM对象 5、释放COM库 1、初始化COM库 HRESULT CoInitialize ( NULL ) 初始化COM库,适用于单线程模型 用宏FAILED SUCCEEDED验证返回值 HRESULT COM中,几乎所有函数都返回HRESULT类型的返回值 HRESULT是一个DWORD值(32位),其中包含成功失败信息 2、获取COM对象的CLSID 3、创建COM对象实例 The CoCreateInstance Function 向COM库提交CLSID,启动该COM对象,并取得其接口指针 CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID * ppv); 五个参数 1 该对象的CLSID 2 是否支持聚集,不支持为NULL,支持为大对象的接口指针 3 该对象的运行环境: 4 所请求接口的IDD 5 指向接口指针的指针 4、使用COM对象 { ... if (SUCCEEDED(hr)) { // Use the interface pointer pStream-Read(...); pStream-Release(); } ... } 5、释放COM库 释放COM库 { ... CoUninitialize(); ... } 2.4 用C++编写基本的COM服务器 一、GUIDs C++不直接支持128bit的数据类型,但有一数据结构表示GUID GUID Format IMPLEMENT_OLECREATE(…) DEFINE_GUID(…) 必须包含initguid.h static const struct GUID = { … } Registry Format Generating GUIDs 在运行时,可用API函数 CoCreateGuid() 获得 在设计时,可用下面工具 GUIDGEN.EXE UUIDGEN.EXE 二、The IUnknown Interface 是所有COM接口的基类,在unknwn.h中 1.QueryInterface 第一个参数是接口ID,第二个参数是接口指针的地址 HRESULT值,Returns S_OK or E_NOINTERFACE. 2. 实现语言无关,取代new, delete,AddRef与Release是关键 每个COM类中,都有一个数据成员m_dwRef,记录一个对象有多少个用户 AddRef,计数m_dwRef加1。当客户要求生成新接口指针(QueryInterface)都调用它,返回值1—n,用于诊断 Release,计数m_dwRef 减1。
您可能关注的文档
- 第一套选拔.doc
- 第五章 国际贸易结算的方式--汇款第一节 汇款的定义及当事人第二节.ppt
- 「乐活一站」陪月服务客户意见调查.doc
- 历史论文《用新课程理念构建中学历史高效课堂》朱富年.doc
- 第12章重点.doc
- 第102届广交会进口展区情况简介.doc
- 《基础会计》主要会计分录总结.doc
- 2009年国家公务员行政职业能力测验考前标准预测3.doc
- 历史课是中学生的必修课.doc
- –20mWupto127 30.ppt
- 职业技术学院2024级工业机器人技术(安装与维护)专业人才培养方案.docx
- 职业技术学院2024级应用化工技术专业人才培养方案.pdf
- 职业技术学院2024级软件技术(前端开发)专业人才培养方案.pdf
- 职业技术学院2024软件技术专业人才培养方案.docx
- 职业技术学院2024级信息安全技术应用(安全运维)专业人才培养方案.docx
- 职业技术学院2024级新能源汽车检测与维修技术(车辆鉴定与评估)专业人才培养方案.pdf
- 职业技术学院2024级石油炼制技术专业人才培养方案.pdf
- 职业技术学院2024级环境监测技术专业人才培养方案.docx
- 职业技术学院2024级汽车制造与试验技术专业人才培养方案.pdf
- 职业技术学院2024级信息安全技术应用专业人才培养方案.pdf
文档评论(0)