im FormClose darfst Du nicht die Instanz selber zerstören
Delphi-Quellcode:
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caHide;
// FreeAndNil(Form2); <- hätte eigentlich hier schon krachen können
end;
dazu scheint es etwas hart, am Programmende eine ggfs. offene Form (noch dazu die in der
DLL) einfach freizugeben, statt sie zu schließen.
Ich würde im Hauptprogramm dieses machen:
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := False;
try
HideForm2; // <- anstatt FreeForm2
finally
CanClose := True;
end;
end;
und auf den Garbage collector vertrauen.
Das setzt natürlich voraus, daß HideForm2 robust programmiert wird, z.B.
Delphi-Quellcode:
procedure HideForm2; stdcall;
begin
if Assigned(Form2) then // <- hat bei Dir gefehlt
Form2.Hide();
end;
Gruß,
blauweiss