阅读量:1
在C++中,QueryInterface是一种用于获取接口指针的方法。它是COM(Component Object Model)规范中的一部分,用于实现对象间的协作。
在COM中,对象可以实现多个接口,而QueryInterface用于查询指定接口的指针。其用法如下:
HRESULT QueryInterface(REFIID riid, void** ppvObject);
- riid:引用接口标识符的GUID(全局唯一标识符)。
- ppvObject:接口指针的地址,用于接收查询到的接口指针。
QueryInterface的返回值是一个HRESULT,表示操作的结果。如果查询成功,返回S_OK;如果查询失败,返回E_NOINTERFACE。
示例代码:
// 定义接口的GUID const IID IID_IMyInterface = { /* GUID值 */ }; // 定义接口 class IMyInterface { public: virtual HRESULT STDMETHODCALLTYPE Method1() = 0; // ... }; // 实现接口的类 class MyClass : public IMyInterface { public: HRESULT STDMETHODCALLTYPE Method1() override { // 实现接口的方法 return S_OK; } // ... }; // 使用QueryInterface查询接口 IMyInterface* myInterface = nullptr; MyClass* myClass = new MyClass(); HRESULT hr = myClass->QueryInterface(IID_IMyInterface, (void**)&myInterface); if (hr == S_OK) { // 成功获取接口指针 // 使用接口 myInterface->Method1(); // ... // 释放接口 myInterface->Release(); } else { // 查询失败 // 处理错误 } // 释放对象 delete myClass;
在实际应用中,QueryInterface常用于实现对象间的接口查询和类型转换。它可以用于动态地判断对象是否实现了指定的接口,从而实现对象的多态性。