繁体   English   中英

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

[英]How to convert pointer value to a string

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

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 ,例如,诀窍是将其重新解释为原生大小的 integer: NativeInt(P)NativeInt是一个有符号的 integer 类型,大小与指针相同。

因此,以下编译:

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

这将显示Sender变量的地址。

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

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 object 的指针变量,而在Pointer(Sender)中,您可以找到 object 本身。

像这样:

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

对于 Delphi 7,使用:

ShowMessage(IntToStr(Cardinal(DummyPointer)));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM