DataModule1.ADOQuery1.ActiveBuffer是PAnsiChar类型,怒指向AnsiChar字符地址指针。
要通过转换,才能获取相关的数据。procedure TShowWordFrm.Button1Click(Sender: TObject);
var
  aStr: AnsiString;
  pA: Pointer;      // 变量 aStr 的地址 }
  pA1: Pointer;     // 字符串中第一个字符的地址(即:内存块的地址)
  pAP: Pointer;     // 变量 AStr 中所存放的指针
begin
  aStr := DataModule1.ADOQuery1.ActiveBuffer;  pA  := Addr(aStr);       // 获取变量 aStr 的地址
  pA1 := Addr(aStr[1]);    // 获取内存块的地址
  pAP := Pointer(aStr);    // 获取变量 aStr 中所存放的指针  Memo1.Clear;
  Memo1.Lines.Add(IntToStr(Integer(pA)));   // 变量 aStr 的地址
  Memo1.Lines.Add(IntToStr(Integer(pA1)));  // 内存块的地址 }
  Memo1.Lines.Add(IntToStr(Integer(pAP)));  // 变量 aStr 中所存放的指针
end;执行的结果:认真阅读,就可以理解了吗?按照此法,就可以获取 “地址”了。

解决方案 »

  1.   

    好了,直接相关打印地址:
    procedure TShowWordFrm.Button1Click(Sender: TObject);
    begin
      Memo1.Clear;
      Memo1.Lines.Add('ActiveBuffer地址:'+IntToStr(Integer(DataModule1.ADOQuery1.ActiveBuffer)));
      Memo1.Lines.Add('内存地址:'+IntToStr(Integer(Addr(DataModule1.ADOQuery1.ActiveBuffer[1]))));
      Memo1.Lines.Add('指针地址:'+IntToStr(Integer(Pointer(DataModule1.ADOQuery1.ActiveBuffer))));
    end;
    执行结果如下:这一下,完全理解了吗?