gpt4 book ai didi

c# - C sharp "public IntPtr pHandle = IntPtr.Zero;"相当于 Delphi "hp: Pointer"

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:03 28 4
gpt4 key购买 nike

经过一些研究我翻译了

pHandle = IntPtr.Zero;

到德尔福

var
pHandle: Pointer;

当我在 Delphi 中中断调试时,我得到 $314328,当我在 C sharp 中中断调试时,我得到一个整数值 134180640。谁能告诉我如何正确翻译成 Delphi?

我在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);

最佳答案

在 .NET 中,IntPtr 是指针类型的表示,它在底层由整数实现,因为它不可能是实际的 .NET 指针(引用),因为必须管理“真实”引用。但它也不能是一个真正的整数,或者您可以对其进行数学运算,这是导致内存损坏的好方法。 (注意:此限制可能存在也可能不存在,具体取决于您使用的 C# 和/或 CLR 的版本。)

但是由于您不能将 IntPtr 视为整数,因此您可以对 IntPtr 做的唯一有用的事情就是为其分配一个从其他地方获得的值,或者将其传递给需要 IntPtr 的某些代码。 IntPtr.Zero 的存在是为了解决一个缺失但非常重要的场景:null 值。您无法将 0 分配给它或针对 0 对其进行测试,并且由于它不是引用,因此您无法针对 null 进行分配或测试>。因此他们将其创建为一个特殊常量来表示“值为 null 的 IntPtr”。

如果您想在 Delphi 中执行相同的操作,请声明指针,然后将其初始化为 nil

关于c# - C sharp "public IntPtr pHandle = IntPtr.Zero;"相当于 Delphi "hp: Pointer",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26916371/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com