如何从C#.NET COM中引发异常。事实上,我在使用Borland Delphi 7.0的Win32应用程序构建中,我试图在.NET中使用一个函数。一切都工作得很好,除了在C#中引发异常的事实没有重新路由到Delphi,我想我想念某种方法装饰器。这是一段代码:
void iLinkV2.FindLinkedClientEng(string SourceApp, string SourceClientID,
ref object ClientID, ref object Engagement)
{
throw new COMException("errClientNotFound",
(int)ExceptionsType.errClientNotFound);
ClientID = SourceClientID;
}
[ComVisible(true),
Guid("D731C821-EEA2-446E-BC5A-441DCA0477F5"),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface iLinkV2
{ ...
}
答案 0 :(得分:8)
你不需要。例外不是COM Interop规范的一部分,不应跨越模块边界。您可以使用状态代码指示任何错误。
在方法退出之前(在每个COM接口方法中)捕获异常。将结果转换为错误代码。如果您使用HRESULT
,则可以将其作为safecall
使用,并让Delphi编译器在屏障的另一侧重新引发异常。