2

我有一个使用 XslCompiledTransform 类进行 xml 操作的 C# DLL。我为 C# DLL 偷了一个 C++/CLI 包装器。

使用 Delphi 5 实现 C++/CLI 包装器时,我收到系统算术错误。这是 Delphi 5 声明:

procedure XsltMethod(XmlPath, XsltPath: PWideChar); cdecl; external 'ahma.dll';

C# 公共方法的主体会创建一个新的 XslCompiledTransform 对象,并且当新创建的对象运行其加载方法时会立即弹出异常。例如:

XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(XsltFile);

如前所述,.NET DLL 引发的异常是系统算术异常。这只发生在从 Delphi 可执行文件中调用时。

我想我应该提到再次调用对象的加载方法可以正常工作。因此,捕获异常并运行该方法进行第二次“通过”就像弹出窗口阻止程序一样。但当然也有例外。

4

2 回答 2

2

随意的想法:

  • 我认为您应该首先从 Visual Studio 调试您的程序集。在 Delphi 代码中插入消息框或其他等待语句,然后从 Visual Studio 附加到进程。跟踪 C# 可能会提供一些关于出现问题的提示。如果你不能让它工作,至少添加传入参数的日志记录。
  • 在 delphi 中,您不需要转义反斜杠。
  • 你确定 E0434F4D 不是一些无辜的第一次机会例外吗?如果您不调试(或从 JIT 调试器异常停止继续,我不完全确定在 Delphi 5 中是否可行),行为是否确实有问题?
  • 我们能否将“本机 Win32 程序集”称为“DLL”,就像我们过去 20 年来所说的那样?:-)
于 2009-09-16T18:50:33.287 回答
2

如此处所述,您可能会遇到浮点控制寄存器的差异。另请参阅QC 报告。您可以尝试调用 Set8087CW($133F); 在您的 Delphi 程序中。之后要小心你的 Delphi 代码中的浮点问题。

于 2009-09-17T07:07:58.190 回答