delphi - 如何将指针值转换为字符串

标签 delphi

如何将指针值转换为字符串?想象一下:

procedure TForm1.Button1Click(Sender: TObject);
var DummyPointer :Pointer;
begin
  DummyPointer := Addr(Sender);
  ShowMessage(IntToStr(DummyPointer)); //this is it, what I can not solve... it casts error
end;

谢谢

最佳答案

首先,您编写 TPointer,但我假设您的意思是 Pointer .

现在,给定一个指针 P,诀窍是将其重新解释为 native 大小的整数:例如 NativeInt(P)NativeInt是与指针大小相同的有符号整数类型。

因此,编译如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  DummyPointer: Pointer;
begin
  DummyPointer := Addr(Sender);
  ShowMessage(IntToStr(NativeInt(DummyPointer)));
end;

这将显示 Sender 变量的地址。

但是,这可能不是您想要的。我怀疑您想要 Sender 指向的对象的地址。实际上,在 Delphi 中,对象变量只是指向堆上对象的指针:

procedure TForm1.Button1Click(Sender: TObject);
var
  DummyPointer: Pointer;
begin
  DummyPointer := Addr(Sender);
  ShowMessage(IntToStr(NativeInt(DummyPointer))); // address to the Sender variable
  DummyPointer := Pointer(Sender);
  ShowMessage(IntToStr(NativeInt(DummyPointer))); // address to the Sender object
  ShowMessage(IntToStr(NativeInt(Sender)));       // address to the Sender object
end;

不同之处在于,在 Addr(Sender) 处,您会找到一个指向 Sender 对象的指针变量,而在 Pointer(Sender) 处,您找到对象本身。

关于delphi - 如何将指针值转换为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66732988/

相关文章:

delphi - 如何模拟Delphi记录中的位域?

delphi - 操作系统版本返回Windows XP但预期使用Windows 8.1

delphi - 在安装程序中使用 SendNotifyMessage

delphi - TIdSSLIOHandlerSocketOpenSSL 和 TLS 协议(protocol)

DELPHI + TWEbbrowser - 将选项和值附加到现有的 SELECT 中

delphi - 检测用户是否通过选项卡或单击获得组件的焦点

delphi - FastMM 是否只报告内存泄漏和/或内存分配?

html - Delphi - 是否有适用于 VCL/FMX 应用程序的所见即所得 HTML 编辑器组件?

delphi - 如何使用 SQL 以编程方式访问 Windows Live 照片库中的面部识别缓存?

windows - HttpAddFragmentToCache 和操作系统错误 50