编程语言
首页 > 编程语言> > C#COMponent引发的异常消息是否通过interop传递给C?

C#COMponent引发的异常消息是否通过interop传递给C?

作者:互联网

如果我在C#类中实现一个COM接口,它将从C模块调用,那么在发生故障的情况下,C#代码应抛出异常;这将由interop层编组为HRESULT故障代码.

但是,传递给Exception构造函数的任何消息文本(或其他信息)是否也可用于调用C代码?如果是这样,如何获得,即哪种API方法?

例如如果在我的C#代码中我抛出新的ArgumentException(“电子邮件地址无效”)我将除了我的COM HRESULT为E_INVALIDARG但是我的自定义文本将被编组或者我只能查找E_INVALIDARG的文本描述吗?

解决方法:

鲜为人知的是,IErrorInfo对象(由GetErrorInfo返回)也实现了_Exception COM接口,该接口将System.Exception类的公共成员公开给非托管代码,包括StackTrace等.

要从C访问_Exception,您需要导入正确版本的mscorlib.tlb,例如:

#import "C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.tlb" raw_interfaces_only

标签:c,c-2,com,com-interop
来源: https://codeday.me/bug/20190711/1432940.html