2009-01-09 68 views
1

這兩種:訪問一個COM接口方法C++

  • CLSID
  • IID

已經指定的上方,並且使用:

  • CoCreateInstance的()

要返回類指定的單個未初始化對象d由上面的CLSID。

我該如何從C++訪問接口的方法? 沒有:

  • ATL
  • MFC
  • 只是普通的C++

之後,我用的CreateInstance()

我有麻煩,使用的CreateInstance() - 與最後一個參數-ppv

使用oleview,我可以看到指定IID的方法以上IID,如:

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

我該如何訪問上述?例子/指導 - 請

問候

回答

5

通過執行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);

這樣做了以後,你會得到的指針IS8Simulation在PSIM並通過,你可以調用這個接口的方法。請記住,您需要在CoCreateInstance調用中提供有效的clsid。

+0

在該示例中,兩個uuidof(..)調用都應該以雙下劃線開頭。我補充說,但不知何故這些格式丟失(我應該逃過這些可能) – Aamir 2009-01-09 07:22:23

+0

Aamir +1對於一個好的帖子,而不是評論你自己的帖子,你最好編輯它們。對於那些只是通過帖子瀏覽而沒有看到評論的人來說,保持清楚。 – 2009-01-09 07:50:58

+0

謝謝Aamir,但是 - IS8Simulation在哪裏宣佈?我怎樣才能調用該接口的方法,其中包含參數如BSTR(如上所示) – Aaron 2009-01-09 10:25:08

0

這是一個有點模糊的實際問題是什麼。一些代碼會有幫助。但是要猜測,你需要QueryInterface嗎?

0
IS8Simulation* pSim = NULL; 
hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim); 

我會嘗試以上,但均是IS8Simulation聲明 - 請excuss我缺乏COM理解

此外,如何調用該方法,下面用純C++

HRESULT Open([in] BSTR FileName) 
0

您可能想#import「something.dll」。這會給你類似IS8Simulation的C++聲明,類似於#include「something.h」。