type myclass = class
    arr:array[0..63] of Tpoint;
    str:string;
    int:integer;
    end;
把自己创建的类实例化的对象 保存到文件中,
需要可用代码。 在线等,马上给分

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    aa:myclass;
    mm:TMemorystream;
    begin
    aa:=myclass.Create;
    mm:=TMemoryStream.Create;
    mm.WriteBuffer(aa,sizeof(aa));
    mm.SaveToFile('1.dat');
    mm.Free;
    aa.Free;
    end;
      

  2.   

    我就是想把某个对象序列化保存到文件中,使用时在load进来,这个对象里面结构包含数组,包含tpoint等对象,java和.net 都有现成的方法,谁知道delphi里怎么用?
      

  3.   

    to : hys_427
     
    请问保存文件类型是任意的吧?
    读的方法呢? 
      

  4.   

    procedure TForm1.Button2Click(Sender: TObject); 
    var 
    aa:myclass; 
    mm:TMemorystream; 
    begin 
    aa:=myclass.Create; 
    mm:=TMemoryStream.Create; 
    mm.LoadFromFile('1.dat'); 
    mm.ReadBuffer(aa,sizeof(aa)); 
    mm.Free; 
    aa.Free; 
    end; 
      

  5.   

    to : hys_427 
    其实用TMemoryStream的方法我也查到了,但是不行啊! 读不出来的,貌似保存的只是地址,内容没存进去 
      

  6.   

    aa.InstanceSize 不行! 还是读不出来
      

  7.   

    我的意思是,用hys_427的代码,只是sizeof(aa)改成aa.InstanceSizesizeof(aa)只有4字节,是一个指针的长度
      

  8.   

    delphi不行的必须要自己实现,如果是Class 则需要一个变量一个变量的写文件,读的时候也一样,先创建实例在赋值。
      

  9.   

    如果只是普通的数据类型的话,可以把属性放到published域,然后利用RTTI来保存并读取
      

  10.   

    mm.ReadBuffer(aa,sizeof(aa));  
    这个保存当然是地址咯
    你需要把所有的属性信息保存到文件中下面是我原来写过的代码,你可以参考一下,另外 对于 SaveToStream,LoadFromStream你可以另外封装为
    SaveToFile,LoadFromFile,这个应该很简单咯
      TPerson = class
        private
          FPersonIndex : cPersonHeader;
          FPrivateBasic : cPrivateBasic;
          FLocation : cLocation;
          FEduCount : Integer;
          FEducations : TEducationList;
          FExpCount : Integer;
          FExperiences : TExperienceList;
          FContacts : cContacts;
          FBasic: cPrivateBasic;
          
        protected    public
          constructor Create();
          destructor Destroy();
          
          property PersonIndex : cPersonHeader read FPersonIndex write FPersonIndex;
          property Basic : cPrivateBasic read FBasic write FBasic;
          property Location : cLocation read FLocation write FLocation;
          property Contacts : cContacts read FContacts write FContacts;
          property Educations : TEducationList read FEducations write FEducations;
          property Experiences : TExperienceList read FExperiences write FExperiences;
          property EduCount : Integer read FEduCount write FEduCount;
          property ExpCount : Integer read FExpCount write FExpCount;      procedure AddEducation(const Value : cEducation);
          procedure AddExperience(const Value : cExperience);      procedure DeleteEducation(const Index : Integer);
          procedure DeleteExperience(const Index : Integer);      procedure SaveToStream(const Stream : TStream);
          procedure LoadFromStream(const Stream : TStream);      function Find(const Condition: String;SearchAll: Boolean=false): Boolean;
      end;.....
    .....
    procedure TPerson.LoadFromStream(const Stream: TStream);
    { TODO : 
    -------------------------------------------------------------------
    Function Name : 
    Parameters    :
    Result        :
    Comments      :
    ------------------------------------------------------------------- }
    var
      i : Integer;
    begin
      Stream.ReadBuffer(FPersonIndex,sizeof(cPersonHeader));
      Stream.ReadBuffer(FBasic,sizeof(FBasic));
      Stream.ReadBuffer(FLocation,sizeof(FLocation));
      Stream.ReadBuffer(FContacts,sizeof(FContacts));
      Stream.ReadBuffer(FEduCount,sizeof(FEduCount));
      SetLength(FEducations,FEduCount);
      for i := 0 to FEduCount-1 do
        Stream.ReadBuffer(FEducations[i],sizeof(cEducation));
      Stream.ReadBuffer(FExpCount,sizeof(FExpCount));
      SetLength(FExperiences,FExpCount);
      for i := 0 to FExpCount-1 do
        Stream.ReadBuffer(FExperiences[i],sizeof(cExperience));
    end;procedure TPerson.SaveToStream(const Stream: TStream);
    { TODO : 
    -------------------------------------------------------------------
    Function Name : 
    Parameters    :
    Result        :
    Comments      :
    ------------------------------------------------------------------- }
    var
      i : Integer;
    begin
      Stream.WriteBuffer(FPersonIndex,sizeof(FPersonIndex));
      Stream.WriteBuffer(FBasic,sizeof(FBasic));
      Stream.WriteBuffer(FLocation,sizeof(FLocation));
      Stream.WriteBuffer(FContacts,sizeof(FContacts));
      Stream.WriteBuffer(FEduCount,sizeof(FEduCount));
      for i := 0 to FEduCount-1 do
        Stream.WriteBuffer(FEducations[i],sizeof(cEducation));
      Stream.WriteBuffer(FExpCount,sizeof(FExpCount));
      for i := 0 to FExpCount-1 do
        Stream.WriteBuffer(FExperiences[i],sizeof(cExperience));
    end;
      

  11.   

    1.将类继承到TComponent下
    2.用WriteComponentRes或ReadComponentRes
      

  12.   

    不过需要你将需要持久化的类属性声名为Published类型
      

  13.   

    delphi 也号称OO,用过java的人笑了! 
    本问题虽然结贴,但仍然期待更好的办法,like java and .net,