質問
両方:
- CLSID
- IID
上記を指定して、次を使用:
- CoCreateInstance()
上記のCLSIDで指定されたクラスの単一の初期化されていないオブジェクトを返します。
C ++からインターフェイスのメソッドにアクセスするにはどうすればよいですか? なし:
- ATL
- MFC
- 単なるC ++
その後、CreateInstance()を使用します
CreateInstance()を使用して、最後のパラメーター-ppvで問題が発生しました
oleviewを使用すると、上記のIIDの上の指定されたIIDのメソッドを見ることができます。
interface IS8Simulation : IDispatch {
HRESULT Open([in] BSTR FileName);
};
どうすれば上記にアクセスできますか?例/ガイダンス-お願い
よろしく
解決
CoCreateInstanceを実行すると、インターフェイスポインターが取得されます。 QueryInterface(...)メソッドを使用すると、他のインターフェイスのインターフェイスポインターを簡単に取得できます。 例えば。、
IUnknown* pUnk = NULL; HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);
IS8Simulation* pSim = NULL; hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void**)&pSim);
これを実行した後、pSimでIS8Simulationへのポインターを取得し、そのインターフェイスのメソッドを呼び出すことができます。 CoCreateInstance呼び出しで有効なclsidを提供する必要があることに注意してください。
他のヒント
実際の問題は少しあいまいです。いくつかのコードが役立ちます。しかし、推測するために、QueryInterfaceが必要ですか?
IS8Simulation* pSim = NULL;
hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);
上記を試みますが、IS8Simulationが宣言されました- COM の理解不足について言い訳してください
さらに、以下の plain C ++ を使用したメソッドの呼び出し方法:
HRESULT Open([in] BSTR FileName)
おそらく#import" something.dll"が必要でしょう。これにより、#include" something.h"と同様に、IS8Simulationなどの型のC ++宣言が得られます。します。