type
  TDeviceInfo = record      
    id: Integer;
    devName: string;
  end;  //装备信息
  TDevInfoPack = packed record
    body: PChar;   //array[0..3] of TDeviceInfo; 
    len: Integer;
  end;var
  Info1,Info2,Info3: TDeviceInfo;
  devInfo: TDevInfoPack;
//devInfo.body 是一个结构体数组,但由于长度不确定,所以改用了PChar类型,请问如何将Info1,Info2,Info3赋值到PChar类型的body中?请各位大侠指教

解决方案 »

  1.   

    最好用一个List来解决这个问题。type 
      TDeviceInfo = class      
        public
            id: Integer;
            devName: string;
      end;var
     i: integer;
     adev: TDeviceInfo;
      Info1,Info2,Info3: TDeviceInfo;
      devInfo: TList;begin
       devinfo := TList.create;
       info1:= TDeviceInfo.Create;
       info1.id := xx;
       info1.devname = 'xxx';
       devinfo.add(info1);
      //info2
       ....
      //info3
       ....
     //使用示例
     for i:=0 to devInfo.length-1 do
    begin
        adev:= (TDeviceInfo) devinfo[I];  
     ......
     end;
      devinfo.free;  //最后使用完了,要释放掉。
    end;
      

  2.   

    可以先定义一个结构体,
    再定义该 结构体的动态数组,
    使用时,可以动态定义动态数组的长度。
    type
      TDeviceInfo = record      
        id: Integer;
        devName: string;
      end;var A:array of TDeviceInfo;   // 声明动态数组
    begin
      Rec:=100;                   // 动态数组长度
      SetLength (A, Rec);         // 设置的动态数组长度
      A[0].id:=5;                 // 给数组中的结构体赋值 
      A[0].devName:='MyStr';      // 给数组中的结构体赋值  
    end;
      
      

  3.   

    一个大字符串(最多2G)搞定!
    格式可以是xml/json/ini
      

  4.   

    type
      TDeviceInfo = record      
        id: Integer;
        devName: string;
      end;
     
    var A:array of TDeviceInfo;   // 声明动态数组
    begin
       // 固名思议是:动态数组,设置也应该是动态才合理
      SetLength (A, Length(A)+1);         // 设置的动态数组长度
      A[High(A)].id:=5;                 // 给数组中的结构体赋值 
      A[High(A)].devName:='MyStr';      // 给数组中的结构体赋值  
    end;