var
  i:integer;
  et:tedit;
begin
  et:=tedit.create(nil);
  i:=integer(@et);
end;以后如何通过i值得到et对象的引用

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      et:tedit;
    begin
      et:=tedit.create(nil);
      et.Text := 'abc';
      i:=integer(et);
      ShowMessage(TEdit(i).Text);
      et.Free;end;
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      i:integer;
      et:tedit;
    begin
      et:=tedit.create(nil);
      et.Text := 'abc';
      i:=integer(@et);    //如果是这样
      ShowMessage(TEdit(Pointer(i)^).Text);   //这里就这样取
      et.Free;end;
      

  3.   

    我在程序中使用第一种方式  i:=integer(et); 正常
    而使用第二种方式 i:=integer(@et);    在返回对象时出现非法访问我的使用过程如下
    procedure TForm1.Button1Click(Sender: TObject);
    var
      et:TEdit;
    begin
      et:=TEdit.Create(nil);
      et.Text:='123';
      Tag:=integer(@et);    //如果是这样
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(TEdit(Pointer(tag)^).Text);   //出错!!!!
    end;把et的定义改为全局变量就ok了,即
    var
      et:TEdit;procedure TForm1.Button1Click(Sender: TObject);
    begin
      et:=TEdit.Create(nil);
      et.Text:='123';
      Tag:=integer(@et);    //如果是这样
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      ShowMessage(TEdit(Pointer(tag)^).Text);   //ok
    end;终于明白了
      integer(et) 返回的是对象的地址
      integer(@et)返回的是et变量名的地址(对象引用的地址)chenzhuo(睡到自然醒):不知我说的对否??谢过
      

  4.   

    奇怪,我明明给了 chenzhuo(睡到自然醒) 20分,怎么会是0 分但是点击管理后,显示了已经给了chenzhuo(睡到自然醒) 20分,系统出错了