
+ Better Delphi support : client & server( new ) - SOAP, XMLRPC and BINARY formats git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@212 8e941d3f-bd1b-0410-a28a-d453659cc2b4
77 lines
1.8 KiB
ObjectPascal
77 lines
1.8 KiB
ObjectPascal
{$INCLUDE wst_global.inc}
|
|
unit imp_helper;
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils,
|
|
base_service_intf,
|
|
base_binary_formatter;
|
|
|
|
|
|
procedure SaveObjectToStream(AObject : TPersistent; AStream : TStream);
|
|
procedure LoadObjectFromStream(AObject : TPersistent; AStream : TStream);
|
|
|
|
procedure SaveObjectToFile(AObject : TPersistent; const AFileName : string);
|
|
procedure LoadObjectFromFile(AObject : TPersistent; const AFileName : string);
|
|
|
|
implementation
|
|
uses TypInfo;
|
|
|
|
procedure SaveObjectToFile(AObject : TPersistent; const AFileName : string);
|
|
var
|
|
strm : TFileStream;
|
|
begin
|
|
if FileExists(AFileName) then
|
|
DeleteFile(AFileName);
|
|
strm := TFileStream.Create(AFileName,fmCreate);
|
|
try
|
|
SaveObjectToStream(AObject,strm);
|
|
finally
|
|
strm.Free();
|
|
end;
|
|
end;
|
|
|
|
procedure LoadObjectFromFile(AObject : TPersistent; const AFileName : string);
|
|
var
|
|
strm : TFileStream;
|
|
begin
|
|
if not FileExists(AFileName) then
|
|
raise Exception.CreateFmt('File not found : "%s"',[AFileName]);
|
|
strm := TFileStream.Create(AFileName,fmOpenRead);
|
|
try
|
|
LoadObjectFromStream(AObject,strm);
|
|
finally
|
|
strm.Free();
|
|
end;
|
|
end;
|
|
|
|
procedure SaveObjectToStream(AObject : TPersistent; AStream : TStream);
|
|
var
|
|
srlzr : IFormatterBase;
|
|
begin
|
|
srlzr := TBaseBinaryFormatter.Create();
|
|
srlzr.BeginObject('root',TypeInfo(TPersistent));
|
|
srlzr.Put('object',PTypeInfo(AObject.ClassInfo),AObject);
|
|
srlzr.EndScope();
|
|
srlzr.SaveToStream(AStream);
|
|
end;
|
|
|
|
procedure LoadObjectFromStream(AObject : TPersistent; AStream : TStream);
|
|
var
|
|
srlzr : IFormatterBase;
|
|
nme : string;
|
|
begin
|
|
srlzr := TBaseBinaryFormatter.Create();
|
|
srlzr.LoadFromStream(AStream);
|
|
nme := 'root';
|
|
srlzr.BeginObjectRead(nme,TypeInfo(TPersistent));
|
|
nme := 'object';
|
|
srlzr.Get(PTypeInfo(AObject.ClassInfo),nme,AObject);
|
|
srlzr.EndScopeRead();
|
|
end;
|
|
|
|
|
|
end.
|
|
|