分享

com的知识点

 水中麒麟 2013-09-15

int main()

{

       CA * pa1 = new CA(1.5);

       CA * pa2 = new CA(2.75);

 

}

上述对象将共享同一  vtbl(虚表指针,), 指向同一虚函数表

 

 

 

 
 

 

 

 

CreateDevice()返回接口指针,这些接口及其占用内存什么时候释放,要通过引用计数的技术来解决。AddRef()给这个接口指针的计数加1,而Release()会将之减1.一旦减到0,表示没有客户使用了,相关的接口就释放了。 由此可知,每次调用Rlease()后,并不一定会释放内存,而是当引用计数归0时释放内存

 

 

 com  更类似于在某次社交聚会上同某人会面,而与对他们进行工作面试有很大的不同,当进行工作面试时,被试者将提交一份介绍他们情况的个人简历,这份

个人简历类似于c++ 类的定义,而当在社交聚会上会面时,没有人会给对方提供个人简历。为了了解对方的情况,必须向它们提问,着一点是类似于com 组件的。

 

第四章  引用计数

 


 com  更类似于在某次社交聚会上同某人会面,而与对他们进行工作面试有很大的不同,当进行工作面试时,被试者将提交一份介绍他们情况的个人简历,这份

个人简历类似于c++ 类的定义,而当在社交聚会上会面时,没有人会给对方提供个人简历。为了了解对方的情况,必须向它们提问,着一点是类似于com 组件的。

 

第四章  引用计数

CoCreateInstace    某个特定的类厂将创建只同某个特定的CLSID相应的组件

CoCreateInstance 创建的组件实际上是通过IClassFactory来创建的 

CoGetClassObject(

CLSID & clsid,

DWORD ;

CONSERVERINFO*

const IID,

void **ppv;

这两个 最大的区别是 :

CoGetClassObject 返回的是 指向所需组件的类厂而不是指向组件本身的一个指针,客户可以通过用CoGetClassObject所返回的指针来创建所需的组件,

这个指针通常是一个IClassFactory 指针

 HRESULT  CoCreateInstance(CLSID &clsid,IUnKnwn *pUnkOuter,DWORD dwClsContext,IID &iid,void ** ppv)

{


*ppv=NULL;

IClassFactory  *pIFactory=NULL;



HRESULT hr =::CoGetClassObject(clsid,dwClsContext,NULL,IID_IClassFactory,(void **)&pIFactory);

if(SUCCEEDED(hr))

{

hr=pIFactory->QueryInterface(iid,ppv);


pIFactory->Release();


}

return hr;


}

 

 

 

 

 

 

 

 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多