Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Objekte zw. Programm und DLL austauschen - Interfaces?

  Alt 6. Sep 2008, 21:03
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?
  Mit Zitat antworten Zitat