【问题标题】:How to raise Exception from C# .NET COM如何从 C# .NET COM 引发异常
【发布时间】:2012-11-05 11:19:14
【问题描述】:

如何从 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
{ ...
}

【问题讨论】:

    标签: c# delphi com delphi-7


    【解决方案1】:

    你不需要。异常不是 COM 互操作规范的一部分,不应跨越模块边界。您可以使用状态码来指示任何错误。

    在方法退出之前捕获异常(在每个 COM 接口方法中)。将结果转换为错误代码。如果您使用HRESULT,那么您可以将其作为safecall 使用,并让Delphi 编译器在围栏的另一边重新引发异常。

    【讨论】:

    • 不确定你不需要像我描述的那样。你不能再靠近了。
    • 谢谢,我很困惑,因为我一开始看的是 Delphi COM,而且由于 Delphi 能够管理异常重新路由,我认为显然 .Net 也能够做到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-21
    • 2011-12-11
    • 1970-01-01
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多