【发布时间】:2014-11-13 18:59:01
【问题描述】:
经过一番研究,我翻译了
pHandle = IntPtr.Zero;
到德尔福
var
pHandle: Pointer;
当我在 Delphi 中进行调试时,我得到 $314328,当我在 C 语言上进行调试时,我得到一个整数值 134180640。谁能告诉我如何正确翻译到德尔福?
我在 Delphi 中调用的 Dll 函数是:
function SAAT_Open(pHandle: Pointer): Boolean; stdcall;
升C函数是:
[DllImport("RFIDAPI.dll", EntryPoint = "SAAT_Open")]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool SAAT_Open(IntPtr pHandle);
【问题讨论】:
-
您的翻译是正确的(它与
SAAT_Open()的原始C 声明相匹配)。问题出在其他地方,比如您没有正确初始化pHandle。 -
我也相信 pHandle 是问题所在,而不是如何正确启动它的一条线索。 pHandle 在调用“c# code”后得到一个值 if (rbnTCP.Checked) { bInit = RfidApi.SAAT_TCPInit(out pHandle, sReaderIP, iReaderPoint); }
-
我已经在我的回答中解释了如何初始化它。就像你的代码已经做到了一样。通过调用 SAAT_TCPInit。从我的回答来看:如果 SAAT_TCPInit 返回 True 表示成功,那么句柄值将是有效的。
-
@DavidHeffernan:假设他对
SAAT_TCPInit()的翻译是准确的并且正确地将pHandle值输出到他的代码中。