我使用了这篇文章中的信息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 整数,而不是作为返回值。