不知什麼時候 System 單元有了 TPtrWrapper 結構體, 它提供了非常小的一點功能: 指針(Pointer)與指針地址(NativeInt)的轉換. 很顯然, 以前常用的 Integer(P) 或 Ptr(Number) 已經不適用與 64 位了, 這時使用 TPtrWrapper 應該是更方便,更保險的選擇. 發現在 Delphi 新的源碼中, 幾乎就把 TPtrWrapper 當做指針來使用了.
{TPtrWrapper 全功能測試}procedure TForm1.FormCreate(Sender: TObject); var num: Integer; p: Pointer; Address: NativeInt; PW1,PW2,PW3: TPtrWrapper; b: Boolean; begin p := @num; //建立方法 1 PW1 := TPtrWrapper.Create(p); Address := PW1.ToInteger; //ToInteger //建立方法 2 PW2 := TPtrWrapper.Create(Address); PInteger(PW2.ToPointer)^ := 123; //ToPointer ShowMessage(IntToStr(num)); //123 //建立方法 3 PW3 := TPtrWrapper.NilValue; //Equal 運算 b := PW1 = PW2; ShowMessage(BoolToStr(b, True)); //NotEqual 運算 b := PW1 <> PW3; ShowMessage(BoolToStr(b, True)); //作為結構的 TPtrWrapper, 其起始位置存放的就是指針 p := Pointer(PW1); ShowMessage(IntToStr(PInteger(p)^)); //123 //既如此, 也就可以直接把一個地址數, 或指針直接強制轉換為 TPtrWrapper 了 PW3 := TPtrWrapper(Address); ShowMessage(IntToStr(Integer(PW3))); //類似於 1244823end;