3

我使用了这篇文章中的信息Delphi - Accessing data from dynamic array that were paid from an untyped Pointer和其他人,加上 Robert Giesecke 的Unmanaged Exports来编写一些很棒的代码 - 谢谢大家。例如,我编写了将复杂的字节流从 C# 返回到 Delphi 的方法。但是,我在做最简单的事情时遇到了麻烦——从函数调用中返回一个整数。

所以,我在 Delphi 中定义了这个原型:

TReturnIntFunc = function(AnInteger: Integer): Integer; safecall;

这在 C# 中:

[DllExport("NegateInt", CallingConvention.StdCall)]
[return: MarshalAs(UnmanagedType.I4)]
static Int32 NegateInt([MarshalAs(UnmanagedType.I4)] Int32 AnInteger)
{
  return AnInteger * -1;
}

与我编写的其他方法一样,我动态加载 C# DLL,找到该函数很好,但是当我从 Delphi 执行它时,它会抛出一个异常,并显示消息“安全调用方法中的异常”。

任何线索任何人?我可以并且让 marshal 返回一个 out 或 ref 整数,而不是作为返回值。

4

1 回答 1

4

Safecall 和 StdCall 不是一回事——也可以尝试在 Delphi 端使用 StdCall。

于 2013-03-04T04:47:14.013 回答