Einzelnen Beitrag anzeigen

Namenloser

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

Objekte zw. Programm und DLL austauschen - Interfaces?

  Alt 6. Sep 2008, 20:23
Hallo DP-User

ich schreibe gerade an einer kleinen Client/Server-Anwendung. Um das ganze möglichst flexibel zu halten, nutze ich ein selbstentwickeltes XML-ähnliches, binäres Format und habe an eine Plugin-Architektur gedacht.

Dabei exportiere ich in der DLL eine Register-Funktion, die die Adressen aller in dieser DLL enthaltenen Funktionen mit Funktionsnamen in eine Liste im Hauptprogramm einträgt (ähnlich wie es Delphi mit BPLs macht).
Wenn der Server einen Befehl bekommt, schaut er in seiner Liste nach und führt, wenn der Befehlsname in der Liste enthalten ist, das zugehörige Callback aus. Ich dachte daran, den Funktionen aus der DLL als Parameter einfach einen meiner "XML"-Tags zu übergeben, der wiederum andere Tags enthalten kann. So könnte ich die Parameterübergabe flexibel gestalten. KÖNNTE: Denn ich kann in der DLL nicht auf die Objekte aus dem Hauptprogramm zugreifen. Ich vermute, das liegt daran, dass DLL und Hauptprogramm jeweils ihre eigene RTL, VCL usw. haben.

Ich vermute, dass ich dafür Interfaces benutzen muss. Mit denen habe ich aber noch nie gearbeitet.
Helfen die denn überhaupt bei diesem Problem? Muss ich für alle bereits vorhandenen XML-Klassen, die ich in der DLL benutzen möchte, entsprechende Interfaces deklarieren?
Das Problem ist nämlich, dass ich die Objekte nicht nachträglich von TInterfacedObject ableiten kann, weil sei teilweise schon von anderen Klassen abgeleitet sind. Heißt das wiederum, ich muss für jede Klasse eine Wrapperklasse konstruieren? Gibt es vielleicht Tools, die sowas automatisieren?


Also am liebsten wäre es mir, wenn es eine andere Lösung gäbe...
Im schlimmsten Falle könnte ich vielleicht den Inhalt der Tags in einen Buffer speichern und hinterher wieder einlesen
  Mit Zitat antworten Zitat