我想用指针 访问 结构中的数据,但是发现指针取出的数据数据不对,请dephi 高手指点??!!!!
type//结构定义哦
     TLong2Uchar_Record =Record
     case  tag: Integer of
   0: (ll :       Integer);
     1: (cc :Array [0..3] of Byte);
     2: (ff:  single);
end;
type//结构定义哦
  PComm60h_Record = ^TComm60h_Record;
  TComm60h_Record = Record
    m_FunctionCode , m_Command: Byte;
    m_Len,m_LiangChengBiaoZhi,m_JiaoZhunPoint : Byte;
    m_CongZhanID,m_MuoKuaiID,m_NewMuoKuaiID   : Integer;
    m_Address : Integer;
    m_LongCovertUchar:TLong2Uchar_Record;
end;
var
    m_Comm60h_Record:  TComm60h_Record;//结构定义哦
//////函数部分procedure TCanParaSetForm.Button1Click(Sender: TObject);
var
  i,len: integer;
  VarSendData : Variant;
  p : PVariant ;//PByteArray  ;
  buf :Array[0..100] of BYTE;
  str:String;
  pStru:^TComm60h_Record;
  pp:TComm60h_Record;
begin
     len := sizeOf(  TComm60h_Record);
     VarSendData := VarArrayCreate([0,len],varbyte); //创建一个variant型数组
       for i :=0 To len-1 do
      buf[i] := i;
      p := ( @ m_Comm60h_Record);
//      Move( buf,p, len);
       pStru :=  @ m_Comm60h_Record;
      str := '1234567890';
      m_Comm60h_Record.m_FunctionCode:=$60;//结构的第1个字节 60h
      m_Comm60h_Record.m_Command:=00;
      m_Comm60h_Record.m_Len:=4;
      m_Comm60h_Record.m_LiangChengBiaoZhi:=0;
      m_Comm60h_Record.m_JiaoZhunPoint:=0;
      m_Comm60h_Record.m_CongZhanID:=$0022433;
      m_Comm60h_Record.m_MuoKuaiID:=$00111213;
      m_Comm60h_Record.m_NewMuoKuaiID:=$00111214;
      m_Comm60h_Record.m_Address:=$00;
      m_Comm60h_Record.m_LongCovertUchar.ff:=4.2;
      //str :=   m_Comm60h_Record;
    //???????????????????????    //问题在这?????????????????
      Move( p, buf, len);    //读出的 buf[0] = 220 不是60h ????????????????????
  //  Move(pStru, buf, len);      for i:=0  To len-1  do
      begin
        VarSendData[i] := buf[i];
//         str[i] := p[i];
      end;
    //   VarSendData := ()p;
      // SCMscomm.Output := str;//@m_Comm60h_Record;//VarSendData;
       SCMscomm.Output := VarSendData;
end;
 

解决方案 »

  1.   

    Move( p, buf, len);

    Move( p^,buf, len);
      

  2.   

    谢谢!
     p := ( PVariant )( @ m_Comm60h_Record); 谢谢 为什么不行?
      

  3.   

    @ m_Comm60h_Record ,返回的是m_Comm60h_Record的地址。
      

  4.   

    p := ( PVariant )( @ m_Comm60h_Record); 
    你这么转还是一个指针值。长度为4字节。
    Move( p, buf, len);
    等于把指针变量的内容COPY给了buf。
    Move( p^,buf, len);
    而这个是把指针变量所指向的内容COPY给了buf。
      

  5.   


    不行表现在什么地方?指针p指向了m_Comm60h_Record的块,可以使用。
      

  6.   

    TComm60h_Record = PComm60h_Record