Com对象的实现(续

Com对象的实现(续

ID:37420760

大小:394.81 KB

页数:36页

时间:2019-05-12

Com对象的实现(续_第1页
Com对象的实现(续_第2页
Com对象的实现(续_第3页
Com对象的实现(续_第4页
Com对象的实现(续_第5页
资源描述:

《Com对象的实现(续》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、COM对象的实现(续)潘爱民2003-10-10http://www.icst.pku.edu.cn/CompCourse2003/复习COM对象IDL描述对象的创建:类厂位置透明注册表自注册的COM组件回顾:客户创建对象过程客户提供信息组件位置、clsid、iid、结果接口指针地址ppv过程:根据组件位置,LoadLibraryGetProcAddress,获取DllGetClassObject用clsid和IID_IClassFactory获得类厂对象接口指针pFactory用iid、ppv调用pFactory->Creat

2、eInstance位置透明性的实现利用注册表在COM组件和客户之间引入中介COM库创建过程COM库处于COM组件和客户中间调用过程对于进程内组件,COM库不再参与处理COM对象创建过程客户组件COM创建函数COM库DllGetClassObject类厂对象接口指针COM创建函数COM库中三个用于创建组件的函数:CoGetClassObjectCoCreateInstanceCoCreateInstanceExCoGetClassObject创建一个类厂HRESULTCoGetClassObject(constCLSID&clsi

3、d,DWORDdwClsContext,COSERVERINFO*pServerInfo,constIID&iid,(void**)ppv);CoCreateInstanceHRESULTCoCreateInstance(constCLSID&clsid,IUnknown*pUnknownOuter,DWORDdwClsContext,constIID&iid,(void**)ppv);CoCreateInstance实现伪码HRESULTCoCreateInstance(constCLSID&clsid,IUnknown*pU

4、nknownOuter,DWORDdwClsContext,constIID&iid,void*ppv){IClassFactory*pCF;HRESULThr;hr=CoGetClassObject(clsid,dwClsContext,NULL,IID_IClassFactory,(void*)pCF);if(FAILED(hr))returnhr;hr=pCF->CreateInstance(pUnkOuter,iid,(void*)ppv);pCF->Release();returnhr;}CoCreateInstanc

5、eExHRESULTCoCreateInstanceEx(constCLSID&clsid,IUnknown*pUnknownOuter,DWORDdwClsContext,COSERVERINFO*pServerInfo,DWORDdwCount,MULTI_QI*rgMultiQI);三个创建函数选用原则如果客户创建远程对象或者希望一次获取对象的多个接口指针,则选用CoCreateInstanceEx函数;如果客户希望获取类厂对象或者要调用类厂的某些成员函数,则选用CoGetClassObject函数;在其他情况下,使用Co

6、CreateInstance函数创建对象,这是最常用的方法。创建过程示意图类厂的实现classCDictionaryFactory:publicIClassFactory{protected:ULONGm_Ref;public:CDictionaryFactory(void);~CDictionaryFactory(void);//IUnknownmembersHRESULTQueryInterface(constIID&iid,void**ppv);ULONGAddRef();ULONGRelease();//IClassFa

7、ctorymembersHRESULTCreateInstance(IUnknown*,constIID&iid,void**ppv);HRESULTLockServer(BOOL);};CreateInstance函数的实现HRESULTCDictionaryFactory::CreateInstance(IUnknown*pUnknownOuter,constIID&iid,void**ppv){CDictionary*pObj;HRESULThr;*ppv=NULL;hr=E_OUTOFMEMORY;if(pUnknown

8、Outer!=NULL)returnCLASS_E_NOAGGREGATION;pObj=newCDictionary();if(pObj==NULL)returnhr;//待续CreateInstance函数的实现(续)//续上页//Obtainthefirs

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。