Autor Beitrag
kachel81
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Fr 13.05.11 10:10 
Ist es möglich, aus einer DLL per function (oder procedure?) lediglich die Deklaration einer Klasse zu erhalten, um sie anschließend in der Hauptanwendung zu instantiieren? Die Instanzvariablen sollen dabei natürlich vom gleichen (Interface-) Typ sein, der auch von der deklarierten Klasse implementiert wird.

Ziel ist, Plugins mithilfe DLLs modular zur Hauptanwendung hinzufügen zu können. Die angesprochene Klasse innerhalb der DLL zu instantiieren und ihre Arbeit verrichten zu lassen, würde besondere Speichermanager oder andere Typen-Einschränkungen zur Folge haben.

Mit welchen Problemen müsste man rechnen und bleibt diese Lösung offen für DLLs aus anderen Programmiersprachen?

Eine gedachte Lösung könnte etwa so aussehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
var
  dllClass: TClass;
  i: IMyInterface;
begin
  dllClass := LoadedDll.GetDLLClass;
  i := dllClass.Create(aCreateParameter);
  try
    i.DoWork(aWorkParameter);
  finally
    i.Free;
  end;
end;
Mindforce
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 358

Win XP Pro / MCE, Win 98, Slax (Linux)
Delphi 07 PRO, Delphi 3+7 (mit Prdx)
BeitragVerfasst: Sa 24.09.11 16:19 
Wäre ebenfalls an einer Lösung interessiert.
Unter C# funktioniert das ganz einfach durch Serialisierung & Binary-formatters.
Aber in Delphi scheint das wohl ein ungelöstes Blatt zu sein.

Ein kleiner Ansatz:

- Die Klasse in einem Byte-Array empfangen.
- Dieses Array in ein MemoryStream schreiben. (Position natürlich nullen)
- Klasse, welche im MemoryStream nun enthalten ist, deserialisieren (Binary-formatter)


Mehr kann ich leider nicht bieten.


MfG

_________________
Our force; in mind.