Hallo,
ich arbeite gerade an einem größeren Projekt, bin noch ziemlich am Anfang. Jetzt bin ich gerade auf Runtime-Packages als Alternative zu DLLs gekommen. Konkret hat mich das hier inspiriert:
http://etutorials.org/Programming/ma...side+Packages/
Dort wird gezeigt wie man eine Form aus einem zur Laufzeit dynamisch geladenen
Package benutzen kann. Ein Chapter zuvor wird davor gewarnt, dass die exe neu compiliert werden muss, wenn in den Interface-Abschnitten der Units in den Packages etwas verändert wird:
http://etutorials.org/Programming/ma...lphi+Packages/
Ich gehe mal stark davon aus, dass diese Warnung nur auf statisch gelinkte Runtime-Packages zutrifft.
Nun zu meiner eigentlichen Frage: Ich habe vor in meiner exe eine von TForm abgeleitete Basisklasse zu definieren und diese in verschiedenen Packages verschieden zu spezialisieren (mittels visual inheritance). Aus der exe heraus erfolgt der Zugriff ausschließlich auf die Elemente (Methoden, Eigenschaften etc.) der Basisklasse, die exe weiß nichts von der Spezialisierung. Unter diesen Voraussetzungen kann ich doch nun ohne weiteres während der Laufzeit der exe solch ein
Package entladen, die
Package-Datei updaten, neu laden, die Form wieder instanzieren (über eine Klassenvariable, siehe Quelltextbeispiel unten) und anzeigen.
Delphi-Quellcode:
var
FormSpez: TForm;
FormClass: TFormClass;
HandlePack: HModule;
begin
// try to load the package
HandlePack := LoadPackage('
PackWithForm.bpl');
FormClass := TFormClass(GetClass);
FormSpez := FormClass.Create(Application);
FormSpez.ShowModal;
FormSpez.Free;
UnloadPackage(HandlePack);
Da ich noch an weiteren Stellen erst einmal herausbekommen muss, wie so etwas tatsächlich gemacht werden muss (z.B. Einstellungen in Delphi etc.), möchte ich gerne im Vorfeld hier klären, ob das Vorhaben so machbar ist, oder ob es von vornherein zum Scheitern verurteilt ist. Wenn ich mich damit bereits auskennen würde, würde ich es natürlich selbst mal schnell austesten
MfG
RSE
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."