Hallo,
ich habe ein kleines Demo-Projekt mit Luckies Code
http://www.michael-puff.de/Programmi...ormInDLL.shtml zusammengestellt um das Problem zu erklären.
In dem Formular sind 2 Buttons, die jeweils eine Formular-
DLL laden.
Also folgende Reihenfolge:
-Button1 drücken, lädt Form1
-Button2 drücken, lädt Form2
-Form1 beenden, beendet nicht, wie zu erwarten, Form1 sondern Form2
Es wird, egal welche
DLL zuerst aufgerufen wird, immer in umgekehrter Reihenfolge des Ladevorgangs enladen.
Delphi-Quellcode:
{-----------------------------------------------------------------------------
Project: Formular in DLL
Description: Aufruf eines Formulares aus einer DLL
Author: Michael Puff, http://michael-puff.de
Date: 2011-12-22
-----------------------------------------------------------------------------}
...
procedure TForm1.btn1Click(Sender: TObject);
type
TShowForm =
procedure;
stdcall;
var
DLLForm1: THandle;
ShowForm: TShowForm;
begin
DLLForm1 := LoadLibrary('
c:\Test\Form1.dll');
if DLLForm1 <> 0
then
begin
@ShowForm := GetProcAddress(DLLForm1, '
Form1Anzeigen');
if Assigned(ShowForm)
then
begin
ShowForm;
FreeLibrary(DLLForm1);
end
else
ShowMessage(SysErrorMessage(GetLastError));
end
else
ShowMessage(SysErrorMessage(GetLastError));
end;
procedure TForm1.btn2Click(Sender: TObject);
type
TShowForm =
procedure;
stdcall;
var
DLLForm2: THandle;
ShowForm: TShowForm;
begin
DLLForm2 := LoadLibrary('
c:\Test\Form2.dll');
if DLLForm2 <> 0
then
begin
@ShowForm := GetProcAddress(DLLForm2, '
Form2Anzeigen');
if Assigned(ShowForm)
then
begin
ShowForm;
FreeLibrary(DLLForm2);
end
else
ShowMessage(SysErrorMessage(GetLastError));
end
else
ShowMessage(SysErrorMessage(GetLastError));
end;
Weiß jemand Rat?