QueryInterface按照字面上的意思是查询获得接口,用时我们可以把他当做C#中的as 或 C++中的dynamic_cast这样用即可(不知道正不正确,请指教)。
我们可以为QueryInterface写一个辅助函数:
template
static CComPtr As(IDispatch* pDisp)
{
CComPtr pAs = NULL;
pDisp->QueryInterface(&pAs);
return pAs;
}
使用时:
IDispatch* pDisp = ...;
CComPtr b = As(pDisp);//IB为目标类型
if (b)//像dynamic_cast那样要检查指针是否为空
{
//这里就可以使用IB对象了
}