2013-05-03 71 views
0

我對unmanaged C++並不是很熟悉,因爲我只使用過MFC和Dot Net。我有一個非託管的dll,我想引用一個進程外服務器。我已經試過如下:如何從非託管C++引用com.exe?

#import "C:\Program Files (x86)\statconn\DCOM\bin\StatConnectorSrv.exe" 
using namespace STATCONNECTORSRVLib; 

#import "C:\Program Files (x86)\statconn\DCOM\bin\StatConnectorSrv.tlb" 
using namespace STATCONNECTORSRVLib; 

STATCONNECTORSRVLib包含對象StatConnector。但是,當我嘗試實例化StatConnector時,我得到「不完整的類型是不允許的」,並且intellisense告訴我StatConnector是一個結構體。

StatConnector *conn = new StatConnector(); 

我在做什麼錯?

回答

3

比方說,你StatConnectorSrv.tlb包含一個接口ISomethingMyMethod方法和組件類Something,那麼你會實例化這樣的:

#import "C:\Program Files (x86)\statconn\DCOM\bin\StatConnectorSrv.tlb" 
using namespace STATCONNECTORSRVLib; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    CoInitialize(NULL); 

    ISomethingPtr ptr(__uuidof(Something)); // create an instance of the Something coclass and get an ISomething pointer back 
    ptr->MyMethod(parameters of the method); 

    CoUninitialize(); 
    return 0; 
} 
+0

好了,我注意到,當我添加類型庫在.Net中它也引用StatConnLib,它包含接口,所以我也導入了StatConnLib.tlb。但是,'IStatConnector ptr(__ uuidof(StatConnector));'給了我幾個錯誤:_Comject抽象類型的對象「StatConnectorCommonLib :: IStatConnector」不允許__,_「StatConnectorCommonLib :: IStatConnector :: IStatConnector」的實例與參數列表匹配。參數類型是:(const _GUID)。另一個海報能夠使用'StatConnector * conn = new StatConnector();'來自非託管C++,所以也許#import有問題? – 2013-05-04 17:41:47

+0

您確定鍵入了IStatConnectorPtr而不是IStatConnector嗎?你必須聲明像'IStatConnectorPtr ptr(__ uuidof(StatConnector))'。 Ptr是一個特殊的後綴。 – 2013-05-04 22:39:31

+0

啊,是的,錯過了。現在,它的工作,謝謝。爲什麼IStatConnectionPtr不能在對象瀏覽器中顯示?它是由導入過程生成的嗎? – 2013-05-06 08:55:32