[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]

    {
      This program demonstrates how to use your EXE
      file as a resource.  You should run this program
      twice - once to write info to the EXE and once to

      read info out.
    }

    program foo;

    uses Objects;

    type
      PMyObject = ^TMyObject;
      TMyObject = object(TObject)
        AString: String;
        constructor Init(S: String);
        constructor Load(var S: TStream);
        procedure Store(var S: TStream);
      end;

    constructor TMyObject.Init(S: String);
    begin
      inherited Init;
      AString := S;
    end;

    constructor TMyObject.Load(var S: TStream);
    begin
      inherited Init;
      S.Read(AString, SizeOf(AString));
    end;

    procedure TMyObject.Store(var S: TStream);

    begin
      S.Write(AString, SizeOf(AString));
    end;

    const
      RMyObject: TStreamRec = (
        ObjType: 100;
        VmtLink: Ofs(TypeOf(TMyObject)^);
        Load: @TMyObject.Load;
        Store: @TMyObject.Store);

    var
      Rez: PResourceFile;
      TheStream: PBufStream;
      AObject, Obj: PMyObject;

    begin
       { Register my object for streaming }
      RegisterType(RMyObject);
       { Create instace of my object }
      Obj := New(PMyObject, Init('Hello world'));
       { Create instance of a stream pointing to EXE file }

      TheStream := New(PBufStream, Init(ParamStr(0), stOpen, 1024));
       { was stream created okay? }
      if TheStream^.Status = stOk then begin
       { Crate instance of resource file }
        Rez := New(PResourceFile, Init(TheStream));
       { try to grab object from resource stream }
        AObject := PMyObject(Rez^.Get('My Object'));
        if AObject <> nil then
       {  if found, then write object's string to screen }
          writeln('The magic string is: ' + AObject^.AString)
        else

       { if not, then write object to resource }
          Rez^.Put(Obj, 'My Object');
      end;
       { clean up }
      Obj^.Free;
      Rez^.Free;
    end.

[Back to EXEC SWAG index] [Back to Main SWAG index] [Original]