在创建组件时经常遇到如下代码段,对于(void**)&pIX 不是很理解,
程序如下:
IX *pIX = null;
HRESULT gr = ::CoCreateInstance(CLSID_Component1,///调用创建com库中的CoCreateInstance()创建组件Component1,NUll,///无包容聚合
CLSCTX_INPROC_SERVER,
IID_IX,///创建组建后返回的接口名称
(void**)&pIX);///返回接口的指针,存放接口地址的地址
if(SUCCEEDED(hr))
{
pIX->Fx();
pIX->Release();
}
在定义pIX时指针类型为IX,由于创建完成组件时不一定返回IX接口,也可能返回其他接口,更重要的一点是 CoCreateInstance ()方法要求参数的类型为 void 的,所以要将返回的指针强制转换为void类型,接口本身有一个地址,函数返回接口的指针,即地址的指针。pIX本身是一个地址,在pIX前加取地址符号 & 后, 得到是2级指针,用于存放函数返回的接口指针。 类型为 IX ** ,然后将IX**类型强制转换为void**类型。
注:如果要问为什么初始化pIX时不直接定义为void*pIX,这是因为按照ANSI(American National Standards Institute)标准,不能对void指针进行算法操作,进行操作的指针必须知道指向类型大小的。