c# - C++ 程序在调用 C# 接口(interface)时接收 HOST_E_CLRNOTAVAILABLE

标签 c# c++ com

我有一个 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/

相关文章:

c# - 我需要在 ASP.NET Core WebAPI 中调用 TopicClient.CloseAsync() 吗?

c# - 在 MapControl Windows phone 上显示自定义 map 路线

c# - AutoFixture AutoMoq 不为某些属性创建模拟

c++ - Vim, C++, 查找成员函数

c++ - 程序继续崩溃 [Project Euler #21]

c++ - 全局范围枚举和命名空间冲突

permissions - 不同的DCOM/COM安全设置是什么意思?

c# - Excel 2013 - 1004 运行时错误刷新查询表BackgroundQuery :=False

c++ - 使用lua协程api和lua_close时出现段错误

c++ - 使用 IFilter C++ 获取 OLE 属性