c# - 如何从 C# .NET COM 引发异常

标签 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
{ ...
}

最佳答案

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

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

关于c# - 如何从 C# .NET COM 引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13421558/

相关文章:

c# - 将枚举列表存储在Azure表存储中

c# - 如何使用异步任务获取数据并在 View 中显示?

c# - 以编程方式创建类似 Visio 的图表

c# - 当我使用 regasm 时,所有参数都输入为输入?那可以改变吗?

com - 通过代码查找typelib文件中依赖的类型库

c# - 如果未进行任何更改, Entity Framework DbContext 是否会保存更改?

delphi - 获取另一个进程的过程/函数地址

Delphi 开发人员的 C# 标准/风格?

sql-server - 德尔福 2010、SQL Server 2008、dbExpress。如何分发给最终用户

delphi - Delphi 中使用 VCL 的 Shell 命名空间扩展