Hallo,
Dein Problem ist folgendes:
Du greifst von der
DLL aus auf Deine Hauptanwendung zu. Die Hauptanwendung soll die
DLL rausschmeissen und dann zur
DLL zurückkehren. Das kann natürlich nicht funktionieren.
Hier die Lösung:
Du baust Dir eine eigene Message-Konstante:
Delphi-Quellcode:
const
WM_CLOSEFORM = WM_USER + 1;
Jetzt baust Du Dir eine Methode, die die Message verarbeitet:
Delphi-Quellcode:
private
procedure CloseForm(var Msg: TMessage); message WM_CLOSEFORM;
.
.
.
procedure TForm1.CloseForm(var Msg: TMessage);
begin
FreeLibrary(Msg.WParam);
end;
In Deiner
DLL musst Du jetzt nur noch die Message abschicken (mit der richtigen Nummer als Argument):
Delphi-Quellcode:
procedure TmdForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
N: Integer;
begin
N := 1;
PostMessage(Application.MainForm.Handle, WM_CLOSEFORM, N, 0);
end;
Dadurch wird sichergestellt, dass Deine Hauptanwendung die Message erst verarbeitet, wenn die
DLL fertig ist.
Gruß
xaromz