在C++中,QueryInterface是一種用于獲取接口指針的方法。它是COM(Component Object Model)規范中的一部分,用于實現對象間的協作。
在COM中,對象可以實現多個接口,而QueryInterface用于查詢指定接口的指針。其用法如下:
HRESULT QueryInterface(REFIID riid, void** 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常用于實現對象間的接口查詢和類型轉換。它可以用于動態地判斷對象是否實現了指定的接口,從而實現對象的多態性。