ImageVerifierCode 换一换
格式:DOCX , 页数:44 ,大小:151.11KB ,
资源ID:1442045      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1442045.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(COM原理讲述Word文档格式.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

COM原理讲述Word文档格式.docx

1、每个标准的COM组件都需要一个接口定义文件,文件的扩展名为IDL。让我们看IUnknow接口的定义文件是怎样的。 local, object, uuid(00000000-0000-0000-C000-000000000046), pointer_default(unique)interface IUnknown typedef unique IUnknown *LPUNKNOWN;cpp_quote(/)/ IID_IUnknown and all other system IIDs are provided in UUID.LIB/ Link that library in with yo

2、ur proxies, clients and servers HRESULT QueryInterface( in REFIID riid, out, iid_is(riid) void *ppvObject); ULONG AddRef(); ULONG Release();local属性禁止产生网络代码。object属性是表明定义的是一个COM接口,而不是DEC风格的接口。uuid属性给接口一个GUID。unique属性表明null(空)指针为一个合法的参数值。pointer_defaul属性所有的内嵌指针指定一个默认指针属性typedef unique IUnknown *LPUNKN

3、OWN;这是一个类型定义cpp_quote这个比较有趣,这是一个在idl文件写注解的方法。这些注解将保存到*.h和*_i.c文件中in表示这个参数是入参out表示这个参数是出参iid_is(riid)表示这个参数需要前一个的riid 参数。Iunknown:COM要求(最基本的要求)所有的接口都需要从IUnknown接口直接或间接继承。IUnkown接口定义了三个方法。 HRESULT QueryInterface(in REFIID riid,out void *ppv);ULONG AddRef();ULONG Release();其中 AddReft() 和Release()负责对象引用

4、计数用的,而 QueryInterface()方法是用于查询所实现接口用的。每当COM组件被引用一次就应调用一次AddRef()方法。而当客户端在释放COM组件的某个接口时就需要调用Release()方法。这里所讲的请在下面的例子仔细体会。COM简单的例子此例子共有四个文件组成: 文件名说明Interface.h接口类定义文件Math.h和Math.cpp实现类文件Simple.cpp 主函数文件这里用来当作COM的客户端interface.h 文件:#ifndef INTERFACE_H#define INTERFACE_H#include /7C8027EA-A4ED-467c-B17E-

5、1B51CE74AF57static const GUID IID_ISimpleMath = 0x7c8027ea, 0xa4ed, 0x467c, 0xb1, 0x7e, 0x1b, 0x51, 0xce, 0x74, 0xaf, 0x57 ;/CA3B37EA-E44A-49b8-9729-6E9222CAE84Fstatic const GUID IID_IAdvancedMath = 0xca3b37ea, 0xe44a, 0x49b8, 0x97, 0x29, 0x6e, 0x92, 0x22, 0xca, 0xe8, 0x4f ;interface ISimpleMath : p

6、ublic IUnknownpublic: virtual int Add(int nOp1, int nOp2) = 0; virtual int Subtract(int nOp1, int nOp2) = 0; virtual int Multiply(int nOp1, int nOp2) = 0; virtual int Divide(int nOp1, int nOp2) = 0;interface IAdvancedMath : virtual int Factorial(int nOp1) = 0; virtual int Fabonacci(int nOp1) = 0;#en

7、dif 此文件首先 #include AddRef(); /这里要这样是因为引用计数是针对组件的 return S_OK;STDMETHODIMP_(ULONG) CMath:AddRef() return +m_cRef;Release() ULONG res = -m_cRef; / 使用临时变量把修改后的引用计数值缓存起来 if(res = 0) / 因为在对象已经销毁后再引用这个对象的数据将是非法的 delete this; return res;int CMath:Add(int nOp1, int nOp2) return nOp1+nOp2;Subtract(int nOp1,

8、int nOp2) return nOp1 - nOp2;Multiply(int nOp1, int nOp2) return nOp1 * nOp2;Divide(int nOp1, int nOp2) return nOp1 / nOp2;calcFactorial(int nOp) if(nOp using namespace std;int main(int argc, char* argv) ISimpleMath *pSimpleMath = NULL;/声明接口指针 IAdvancedMath *pAdvMath = NULL; /创建对象实例,我们暂时这样创建对象实例,COM

9、有创建对象实例的机制 CMath *pMath = new CMath; /查询对象实现的接口ISimpleMath pMath-QueryInterface(IID_ISimpleMath, (void *)&pSimpleMath); if(pSimpleMath) cout 10 + 4 = Add(10, 4) Fabonacci(10) initguid.hMathCOM.h/standard self-registration tableconst char * g_RegTable3= CLSID3BCFE27E-C88D-453C-8C94-F5F7B97E7841,0,Mat

10、hCOM,CLSID3BCFE27E-C88D-453C-8C94-F5F7B97E7841InprocServer32, 0, (const char * )-1 /*表示文件名的值*/,CLSID3BCFE27E-C88D-453C-8C94-F5F7B97E7841ProgIDtulip.MathCOM.1tulip.MathCOM.1CLSID3BCFE27E-C88D-453C-8C94-F5F7B97E7841HINSTANCE g_hinstDll;BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) g_hinstDll=(HINSTANCE)hModule; return TRUE;/* * Function Declare : DllUnregisterServer * Explain : self-unregistration routine * Parameters : * void - * Return : * STDAPI - * Author : tulip * Time : 2003-10-29 19:07:42 *

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2