强制建立QueryInterface两个参数相关性的宏:
#define IID_PPV_ARG(Type, Expr) IID_##Type, /
reinterpret_cast (static_cast (Expr))
然后就可以这样使用QueryInterface:
IPug *pPug = 0;
hr = punk->QueryInterface(IID_PPV_ARG(IPub, &pPug));
这样如果QueryInterface的第二个参数如果传递是不正确的类型,则会导致编译器报错。