从 C# 调用 COM dll,HRESULT 错误处理?

Posted

技术标签:

【中文标题】从 C# 调用 COM dll,HRESULT 错误处理?【英文标题】:Making a COM dll to be invoked from c#, HRESULT error handling? 【发布时间】:2011-02-13 15:10:27 【问题描述】:

我正在制作一个 C# 将使用的 COM 接口,但是我想知道如何检查 C# 端异常处理的错误。目前我只是为大多数方法返回 HRESTULT 或 bool,然后执行 Marshal.ThrowExceptionForHR 但在其中一些方法中可能会出错,并且返回 E_FAIL 并不能解决问题。

我该怎么做才能返回更多信息?我可以自己制作一个 HRESULT 吗?

【问题讨论】:

【参考方案1】:

我从来没有真正做到这一点,但理论上你应该可以通过supporting IErrorInfo 做到这一点。 Marshal.GetExceptionForHR() 有一个采用 IErrorInfo 指针的重载。

顺便说一句,您不必手动调用Marshal.ThrowExceptionForHR() - 如果您的方法返回 HRESULT 和 [out] 参数作为返回值,您可以在 .NET 中将其声明为返回返回值和 set PreserveSig=false 和如果 HRESULT 指示失败,CLR 将自动抛出异常。

【讨论】:

以上是关于从 C# 调用 COM dll,HRESULT 错误处理?的主要内容,如果未能解决你的问题,请参考以下文章

无法加载 DLL“ParkCOM.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E) 终结者

如何处理 C++ 加载的 C# DLL 中的异常

试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)

VS2010的报错提示:无法加载DLL“libarcsoft_fsdk_face_detection.dll”:找不到指定的模块。(异常来自HRESULT:0x8007007E)。

对 COM 组件的调用返回了错误 HRESULT E_FAIL

关于无法加载DLL"***.dll":找不到指定的模块(异常来自HRESULT:0x8007007E)问题的解决办法