C++で、QueryInterfaceを使う方法は?
C++のQueryInterfaceは、インターフェースポインタを取得するメソッドで、オブジェクト間の協調を実現するためのCOM(Component Object Model)仕様の一部です。
COMでは、オブジェクトは複数のインターフェイスを実装することができ、QueryInterfaceは特定のインターフェイスへのポインタを問い合わせるために使用されます。使用方法は次のとおりです。
HRESULT QueryInterface(REFIID riid, void** ppvObject);
- riid:インターフェイスの識別子を表す GUID(Globally Unique Identifier)。
- インタフェースポインタのアドレス。検索されたインタフェースポインタを受け取ります。
QueryInterface の戻り値は HRESULT 型で操作の結果を表します。検索に成功すれば S_OK が、検索に失敗すれば E_NOINTERFACE が返されます。
ネイティブの日本語に変換してください、1つのオプションのみ必要です。
// 定义接口的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 は多くのインターフェイスに対する問い合わせや type 変換をするために使われます。指定されたインターフェイスを実装しているかどうかを動的に判断してオブジェクトの多態性を実現します。