从 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) 终结者
试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
VS2010的报错提示:无法加载DLL“libarcsoft_fsdk_face_detection.dll”:找不到指定的模块。(异常来自HRESULT:0x8007007E)。