Dario Linsky
Erfahrenes Mitglied
Da ich meine Anwendung so klein und kompakt wie möglich halten möchte, hab ich mir überlegt, nur das Hauptformular (FormStyle := fsMDIForm) in die eigentliche Anwendung zu compilieren. Alle anderen Formulare, vor allem die MDI-Children möchte ich gerne in dynamisch ladbare Bibliotheken auslagern.
Dazu hab ich den entsprechenden Code gefunden und einigermassen angepasst. Im Hauptformular wird das MDI-Child aus der DLL geladen:
Dadurch wird dann einfach nur eine Funktion aus der DLL aufgerufen, die das Formular dann erzeugt:
Die beiden Felder "ParentForm" und "ParentApplication" des Formulars sind vom Typ TForm und TApplication, und werden im public-Abschnitt vom MDI-Child definiert.
Wenn ich das laufen lasse, dann funktioniert das wie gesagt auch erstmal problemlos. Nur beim Beenden des Programms bekomm ich immer drei Laufzeitfehler. Beim Debuggen kann ich nichts finden, aber irgendwo läuft das Programm nicht ganz sauber.
Dazu hab ich den entsprechenden Code gefunden und einigermassen angepasst. Im Hauptformular wird das MDI-Child aus der DLL geladen:
Code:
var
dllHandle: THandle;
OpenMDIChild: procedure (PApp: TApplication; PForm: TForm); stdcall;
begin
DllHandle := LoadLibrary('ProjectDll');
@OpenMDIChild := GetProcAddress(dllHandle, 'ShowMDI001');
if @OpenMDIChild <> nil then
begin
OpenMDIChild(Application, Self);
end;
end;
Code:
procedure ShowMDI001(PApp: TApplication; PForm: TForm); export; stdcall;
var
Form: TForm001;
begin
Application := PApp;
Form := TForm001.Create(PForm);
Form.ParentForm := PForm;
Form.ParentApplication := PApp;
Form.Show;
end;
Wenn ich das laufen lasse, dann funktioniert das wie gesagt auch erstmal problemlos. Nur beim Beenden des Programms bekomm ich immer drei Laufzeitfehler. Beim Debuggen kann ich nichts finden, aber irgendwo läuft das Programm nicht ganz sauber.