对于不继承自IUnknown的COM接口,在调用QueryInterface方法时需要手动指定接口的IID。例如:
// 声明不继承自IUnknown的COM接口
interface IFoo
{
HRESULT Bar();
}
// 创建COM对象并获取IFoo接口指针
IFoo* pFoo;
CoCreateInstance(CLSID_Foo, NULL, CLSCTX_ALL, IID_IFoo, (void**)&pFoo);
// 调用IFoo接口方法
pFoo->Bar();
// 手动查询IID_ISupportErrorInfo接口,并获取指向该接口的指针
ISupportErrorInfo* pSupportErrorInfo;
pFoo->QueryInterface(IID_ISupportErrorInfo, (void**)&pSupportErrorInfo);
// 调用ISupportErrorInfo接口方法
pSupportErrorInfo->InterfaceSupportsErrorInfo(IID_IFoo);
需要注意的是,手动指定IID的方式只适用于不继承自IUnknown的COM接口。对于继承自IUnknown的COM接口,无需手动指定IID,可以直接使用QueryInterface方法。