代码中变量的意义看不懂啊:

来源:百度知道 编辑:UC知道 时间:2024/05/20 02:26:38
HRESULT CFactory::GetClassObject(const CLSID&clsid,const IID&iid,void * *ppv)
//最后一个形参为什么有两个“* ”?
{
if((iid!=IID_IOnKnow)&(iid!=IID_IClassFactory))
//IID_IOnKnow与IID_IClassFactory是什么意思
{
return E_NOINTERFACE;
//E_NOINTERFACE是什么意思
}
//Traverse the arry of data looking for this class ID;
....
}

呵呵,这样才好给 ppv 赋值啊。其实效果和 void* &pv 一样的。

HRESULT CFactory::GetClassObject(const CLSID&clsid,const IID&iid,void * *ppv)
{
ISomeInterface * pObj = new Obj ;
*ppv = (void*)pObj ;
}

使用方法:
ISomInterface* p = 0 ;
pFactory->GetClassObject(clsid,iid,&p) ;

///////////////
IID_IOnKnow和IID_IClassFactory 就是COM接口的GUID;

E_NOINTERFACE 如下:
// MessageId: E_NOINTERFACE
//
// MessageText:
//
// No such interface supported
//
#define E_NOINTERFACE _HRESULT_TYPEDEF_(0x80004002L)

楼主一定没学过 COM 喽

记号,等待高手

void * *ppv 这个为指向指针的指针变量,就是说ppv里面存储的为指针变量

而IID_IOnKnow和IID_IClassFactory可能是一常量宏.

void **ppv 指向指针的指针

而IID_IOnKnow和IID_IClassFactory是一常量宏