如何从C#.NET COM中引发Exception

Eri*_*oix 3 c# delphi com delphi-7

如何从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
{ ...
}
Run Code Online (Sandbox Code Playgroud)

Fur*_*dar 8

你不需要.例外不是COM Interop规范的一部分,不应跨越模块边界.您可以使用状态代码指示任何错误.

在方法退出之前(在每个COM接口方法中)捕获异常.将结果转换为错误代码.如果你使用a HRESULT然后你可以使用它,safecall并让Delphi编译器在篱笆的另一边重新引发异常.

  • 谢谢,我很困惑,因为我最初看的是Delphi COM,而且由于Delphi能够管理异常重新路由,我觉得很明显.Net能够做到这一点. (2认同)