Danke für die Antworten
@Elvis:
Wie gesagt, meine Klass eist nur
XML-ähnlich aufgebaut von der Struktur her. Es ist aber ein eigenes, binäres Format. Ich habe mich gegen
XML entschieden, weil die Kommunikation über das Internet laufen soll, und ich den Größenzuwachs bei
XML insbersondere bei Binärdaten vermeiden will. Deshalb kann ich die Klasse von Delphi nicht benutzen.
Wie kann ich denn völlig ohne Objektreferenzen arbeiten? Irgendwo muss das Objekt doch mal erzeugt werden
@Apollonius:
Ist es denn sinnvoll, den Code zu kopieren? Es sind zwar nicht sehr viele Klassen, aber irgendwie widerstrebt mir das.
Zur Zeit sieht meine Deklaration so aus:
Delphi-Quellcode:
TBinXMLValue = class(TMemoryStream)
private
function getAsBoolean: boolean;
function getAsFloat: extended;
function getAsInt64: int64;
function getAsLongint: longint;
function getAsString: string;
procedure setAsBoolean(const Value: boolean);
procedure setAsFloat(const Value: extended);
procedure setAsInt64(const Value: int64);
procedure setAsLongInt(const Value: longint);
procedure setAsString(Value: string);
protected
procedure SaveToStream(const aStream: TStream);
procedure LoadFromStream(const aStream: TStream);
public
constructor Create;
property AsString: string read getAsString write setAsString;
property AsLongint: longint read getAsLongint write setAsLongInt;
property AsInt64: int64 read getAsInt64 write setAsInt64;
property AsFloat: extended read getAsFloat write setAsFloat;
property AsBoolean: boolean read getAsBoolean write setAsBoolean;
end;
TBinXMLTag = class
private
FName: string;
FChildren: TBinXMLTaglist;
FParent: TBinXMLTag;
FValue: TBinXMLValue;
procedure SetName(const Value: string);
protected
procedure SetParent(const Value: TBinXMLTag);
procedure SaveToStream(const aStream: TStream);
procedure LoadFromStream(const aStream: TStream);
public
constructor Create(const aParent: TBinXMLTag = nil);
destructor Destroy; override;
property Name: string read FName write SetName;
property Parent: TBinXMLTag read FParent;
property Children: TBinXMLTaglist read FChildren;
function NewChild(const aName: string=''): TBinXMLTag;
property Value: TBinXMLValue read FValue;
end;
TBinXMLTagList = class(TObjectList)
private
FParent: TBinXMLTag;
function GetItem(index: integer): TBinXMLTag;
procedure SetItem(index: integer; const Value: TBinXMLTag);
procedure FreeAllItems;
function GetItemByName(Name: string): TBinXMLTag;
protected
procedure SetParent(const Value: TBinXMLTag);
procedure SaveToStream(const aStream: TStream);
procedure LoadFromStream(const aStream: TStream);
public
constructor Create(const aParent: TBinXMLTag = nil);
property Parent: TBinXMLTag read FParent;
property Items[index: integer]: TBinXMLTag read GetItem write SetItem; default;
property ItemByName[Name: string]: TBinXMLTag read GetItemByName;
function Add(AItem: TBinXMLTag): integer;
end;
Es gibt noch ein TBinXMLDocument, das ich aber in der
DLL nicht brauchen werde. Wie könnte man bei den obigen Deklarationen am sinnvollsten Interfaces einflicken?