现在有一个记录type MyRecord = record
    field1:DOWRD;
    field2:DOWRD;
    field3:DOWRD;
    field4:DOWRD;//这个record里的域都是DWORD类型
end;我现在知道我要访问的域的位置是第三个,还知道record的首地址,但不知道第三个域的名字怎样才能通过:记录首地址,域的位置来读写该域?
多谢

解决方案 »

  1.   

    给你个EX:
    type MyRecord = record
        field1:DWORD;
        field2:DWORD;
        field3:DWORD;
        field4:DWORD;//这个record里的域都是DWORD类型
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
     m:MyRecord;
     p:pword;
    begin
      m.field1:=1;
      m.field2:=2;
      m.field3:=3;
      m.field4:=4;
      p:=pword(pchar(@m)+2*sizeof(dword)); //@m为m的首址,2为第3个域(0..3)
      ShowMessage(inttostr(p^)); //结果为第3个域的值,即为3
    end;
      

  2.   

    procedure TForm2.btn1Click(Sender: TObject);
    var
    p:PLongWord;
     s:MyRecord;begins.field1:=11;
    s.field2:=121212;
    p:= Pointer( Integer(@s)+SizeOf(DWORD)) ;
    p^:=23;
    mmo1.Lines.Clear;
    mmo1.Lines.Add('@s      ' +intToStr(Integer(@s) ));
    mmo1.Lines.Add('p     '+intToStr(Integer(p)));
    mmo1.Lines.Add('p^    '+   IntToStr(p^));
    end;