2012-02-03 17 views
0

我有一個C++程序調用我已經在C#實現的接口時接收HOST_E_CLRNOTAVAILABLE。我一直獲得其定義爲CLR has been disabled due to unrecoverable error錯誤0x80131023 HOST_E_CLRNOTAVAILABLE。 C++程序不會產生這個錯誤,除非我的程序被調用,但是我看不到堆棧跟蹤中的任何函數。有沒有人有關於如何確定問題的任何提示?C++程序調用C#接口

編輯: 我使用後期綁定創建一個IDispatch接口。

hRC = _pService->Invoke(
     _DispIDs[nDispIDIndex], IID_NULL, LOCALE_USER_DEFAULT, 
     METHOD_TO_CALL, &Disp, &VarResult, NULL, NULL); 

它調用的方法最成功的,沒有錯誤:

IUnknown* pUnknown; 
hRC = CoCreateInstance(
     MyProgID,     
     0,       
     CLSCTX_ALL,     
     IID_IUnknown,    
     (void**) &pUnknown);   
hRC = pUnknown->QueryInterface(
     IID_IDispatch,    
     (void**) &_pService);  
pUnknown->Release(); 

然後調用。當調用Close方法時,它返回提到的錯誤。

+2

本地C++程序無法調用託管代碼,而無需首先加載並初始化CLR。你沒有努力描述你如何確保首先加載CLR。如果沒有首先記錄,你就無法得到答案。 – 2012-02-03 13:20:29

+0

@HansPassant道歉,我不太確定什麼是有用的。我已經更新了建議的問題。 – 2012-02-03 14:03:24

回答

1

最可能的故障模式,這裏是您的通話之一絆倒,這不是抓了管理異常,並引起了CLR關閉。這可能發生在由託管代碼啓動的線程中,因此它不會通過HRESULT報告給您。這留下痕跡,輸出窗口應該包含它的通知,「第一機會異常」的異常類型0xe0534f4d。

使用託管調試器來解決。 VS有一個:Project + Properties,Debugging,Debugger類型設置。您可以使用「調試+異常」強制執行自動中斷,在「投擲」框中勾選CLR異常。