我有一个 C++ 程序调用我在 C# 中实现的接口(interface)。我一直收到错误 0x80131023 HOST_E_CLRNOTAVAILABLE
,它被定义为 CLR has been disabled due to unrecoverable error
。除非我的程序被调用,否则 c++ 程序不会产生此错误,但我在堆栈跟踪中看不到我的任何函数。有没有人对如何识别问题有任何提示?
编辑: 我正在使用后期绑定(bind)来创建 IDispatch 接口(interface)。
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 方法时,它会返回提到的错误。
最佳答案
这里最可能的失败模式是您的一个调用触发了一个未捕获的托管异常,并导致 CLR 关闭。这可能发生在由托管代码启动的线程中,因此它不会通过 HRESULT 报告给您。这留下了痕迹,输出窗口应该包含它的通知,异常类型 0xe0534f4d 的“第一次机会异常”。
使用托管调试器进行故障排除。 VS有一个:Project + Properties,Debugging,Debugger类型设置。您可以使用 Debug + Exceptions 强制自动中断,勾选 CLR 异常的 Thrown 框。
关于c# - C++ 程序在调用 C# 接口(interface)时接收 HOST_E_CLRNOTAVAILABLE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9127284/