QueryInterface
虽然具有对象可以表示的功能的机制它提供静态(在实例化之前),从而COM结构是使用调用 QI的 IUnknown 方法。
每个接口从 IUnknown派生,因此,每个接口具有 QueryInterface的实现。 无论实现,此方法查询对象的调用方需要指针接口的IID。 如果对象支持该接口,QueryInterface 检索指向接口,不过,同一调用 AddRef。 否则,它将返回 E_NOINTERFACE 错误代码。
请注意必须始终遵循 引用计数 规则。 如果对接口指针的 Release 递减引用计数为零,则不应再使用该指针。 有时可能需要获取弱引用对象(即您可能希望获取指向其接口之一,而不会递增引用计数),但是,通过调用 QueryInterface 执行此操作不可接受后跟 Release。 以这种方式获取的指针无效,并且不应使用。 此很容易会变得很明显,当 _ATL_DEBUG_INTERFACES 定义时,因此,定义此宏是一种有用的方法查找引用计数bug。