从托管代码返回Int32到Delphi
本文关键字:Delphi Int32 返回 托管代码 | 更新日期: 2023-09-27 18:01:55
我使用了这篇文章中的信息Delphi -从无类型指针填充的动态数组中访问数据,以及Robert Giesecke的非托管导出来编写一些很棒的代码-谢谢大家。例如,我编写了从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执行它时,它抛出了一个异常,消息为"safecall方法中的异常"。
有线索吗?我可以封送一个out或ref整数,只是不作为返回值。
Safecall和StdCall不是一回事-在Delphi端也可以尝试使用StdCall。