2017-10-17 262 views
-1

我使用COM互操作來調用從C++ DLL中的C#DLL的方法調用時。從另一個應用程序調用C++ dll,對我來說本質上是一個黑盒子(例如,我看不到它的任何代碼)。創建COM接口指針的作品從一個應用程序調用時,但不會從其他應用程序

當此應用程序調用C++ dll中的方法時,它會按預期方式執行,直到嘗試創建指針/分配內存到C#COM接口,在該點該方法失敗(記錄錯誤):

TJIntegration::ITJInterfacePtr tJPtr = NULL; 
HRESULT hRes = tJPtr.CreateInstance(__uuidof(TJIntegration::TJInterface)); 
if (!(SUCCEEDED(hRes))) 
{ 
    LOG_ERROR << "Could not create pointer for TJInterface. Has the COM DLL been registered?"; 
} 

然而,我已經創建了一個測試應用程序,也稱成這個dll,並且該方法按預期完全執行,包括創建此指針。

我測試在同一臺機器(其中註冊該DLL),這些應用程序,所以我不明白爲什麼從另一個調用的時候,方法將正確地從一個應用程序調用時運行,但在這一點上失敗了呢?

+0

如何這個問題從一個不同的你聯繫? – user463035818

+0

當你說指針時,你的意思是它在COM對象/函數中分配內存時崩潰了嗎?或者,調用應用程序崩潰只是*調用*方法?或者程序在崩潰之前將它變成COM方法?因爲這可能只是基於函數參數的錯誤。 –

+0

@ tobi303我聯繫的問題是有不同的機器上,由於沒有註冊的DLL使用,是當它崩潰的事情。這是在同一臺機器上(不同的應用程序在dll註冊的地方)進行dll調用時的行爲。 –

回答

0

事實證明,我需要使用regasm時註冊DLL使用/codebase選項。

相關問題