QueryInterface

虽然存在一些机制供对象静态地表达功能(在实例化之前),但是基本 COM 机制将使用名为 QueryInterfaceIUnknown 方法。

每个接口都派生自 IUnknown,因此每个接口都有一个实现 QueryInterface。 无论实现如何,此方法都会使用调用方想要一个指向接口的 IID 的指针来查询对象。 如果对象支持该接口,则 QueryInterface 检索指向接口的指针,同时调用 AddRef。 否则,它将返回 E_NOINTERFACE 错误代码。

请注意,必须随时遵守引用计数规则。 如果调用接口指针上的 Release 将引用计数递减为零,则不应再次使用该指针。 有时,可能需要获取对对象的弱引用(也就是说,可能获取指向其中一个接口的指针,而无需递增引用计数),但通过调用 QueryInterface 后跟的 Release 来执行此操作是不可接受的。 以这种方式获取的指针无效,不应使用。 定义 _ATL_DEBUG_INTERFACES 时,这更容易变得明显,因此定义此宏是查找引用计数 bug 的有用方法。

另请参阅

COM 简介
QueryInterface:在对象中导航