• System.TPtrWrapper 指针包装器



    不知什么时候 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))); //类似于 1244823
    end;
    

  • 相关阅读:
    Python 之pymysql数据库模块
    Python 之sqlite3数据库模块
    Python 之操作sqlite3
    Python 之requests网络请求模块
    Python 之os文件目录模块
    Python 之json模块
    Python 之random随机数模块
    vue.js三种安装方式
    VUE学习之计算属性computed
    vue添加背景音乐
  • 原文地址:https://www.cnblogs.com/del/p/3130629.html
Copyright © 2020-2023  润新知