[DLL] Rückgabe von Types/Interfaces aus dynamisch geladenenen DLLs
spacer
Autor Nachricht
kachel81
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 63



BeitragVerfasst: Fr 13.05.11 10:10 
Betrifft: DLL
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 markieren
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;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Mindforce
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic 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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home