1

両方:

  • CLSID
  • IID

上記を指定し、以下を使用します。

  • CoCreateInstance()

上記の CLSID で指定されたクラスの単一の初期化されていないオブジェクトを返します。

C++ からインターフェイスのメソッドにアクセスするにはどうすればよいですか? それなし:

  • ATL
  • MFC
  • ただのC++

その後、 CreateInstance() を使用します

CreateInstance() を使用して問題が発生しました - 最後のパラメータ - ppv

oleview を使用すると、上記の IID の上に指定された IID のメソッドを次のように表示できます。

interface IS8Simulation : IDispatch {
    HRESULT Open([in] BSTR FileName);
};

上記にアクセスするにはどうすればよいですか?例/ガイダンス - お願いします

よろしく

4

4 に答える 4

6

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 を提供する必要があることに注意してください。

于 2009-01-09T07:20:57.943 に答える
0

おそらく #import "something.dll" が必要です。これにより、#include "something.h" と同様に、IS8Simulation などの型の C++ 宣言が得られます。

于 2009-01-09T15:36:29.993 に答える
0

実際の問題が何であるかは少しあいまいです。いくつかのコードが役立ちます。しかし、推測してみると、QueryInterface は必要ですか?

于 2009-01-09T07:19:47.273 に答える
0
 IS8Simulation* pSim = NULL;
 hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);

上記を試してみますが、IS8Simulation が宣言されていました。COMの理解が不足していることをお許しください。

さらに、プレーン C++を使用して以下のメソッドを呼び出す方法:

HRESULT Open([in] BSTR FileName)
于 2009-01-09T10:17:25.903 に答える