community.borland.com

Article #15635: Using your EXE as a resource file

 Technical Information Database

TI635D.txt   Using your EXE as a resource file
Category   :General Programming
Platform    :All
Product    :Pascal  All

Description:
{
  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.


Reference:


7/16/98 4:33:49 PM
 

Last Modified: 01-SEP-99