调用C#接口时,C ++程序接收HOST_E_CLRNOTAVAILABLE

时间:2012-02-03 10:40:47

标签: c# c++ com

我有一个C ++程序调用我在C#中实现的接口。我一直收到错误0x80131023 HOST_E_CLRNOTAVAILABLE,定义为CLR has been disabled due to unrecoverable error。除非我的程序被调用,否则c ++程序不会产生此错误,但我在堆栈跟踪中看不到任何函数。有没有人有关于如何识别问题的任何提示?

编辑: 我正在使用后期绑定来创建IDispatch接口。

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

然后使用:

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

它成功调用了大多数方法而没有错误。调用Close方法时,它返回提到的错误。

1 个答案:

答案 0 :(得分:1)

这里最可能的失败模式是你的一个调用触发了一个未被捕获的托管异常并导致CLR关闭。这可能发生在托管代码启动的线程中,因此不会使用HRESULT报告给您。留下痕迹,输出窗口应该包含一个通知,异常类型为0xe0534f4d的“第一次机会异常”。

使用托管调试程序进行故障排除。 VS有一个:Project + Properties,Debugging,Debugger类型设置。您可以使用Debug + Exceptions强制自动中断,勾选CLR异常的Thrown框。