Hallo zusammen,
habe ein kleines Problem.
Ich habe ein MDI-Form und in diesem möchte ich einige Child-Fenster aus verschiedenen DLLs öffnen nur leider bekomme ich beim Öffnen immer eine Zugriffsverletztung
Hier der Code im MDI-Form
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;
und und der DLL verwende ich
procedure ShowMDI001(PApp: TApplication; PForm: TForm); export; stdcall;
var
Form: TForm001;
dllApp: TApplication;
begin
dllApp := Application;
Application := PApp; // das Application-Objekt auf die Host-Anwendung einstellen
Form := TForm001.Create(PForm); // MDI-Child erzeugen
Form.ParentForm := PForm;
Form.ParentApplication := PApp;
Form.Show;
Application := dllApp; // das Application-Objekt zurücksetzen, damit die DLL vernünftig beendet werden kann
end;
hat jemand eine Idee warum das ganze nicht klappt.
Zur Laufzeit erzeugte MDI-Childs werden doch auch geöffnet.
Gruss
Stefan
habe ein kleines Problem.
Ich habe ein MDI-Form und in diesem möchte ich einige Child-Fenster aus verschiedenen DLLs öffnen nur leider bekomme ich beim Öffnen immer eine Zugriffsverletztung
Hier der Code im MDI-Form
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;
und und der DLL verwende ich
procedure ShowMDI001(PApp: TApplication; PForm: TForm); export; stdcall;
var
Form: TForm001;
dllApp: TApplication;
begin
dllApp := Application;
Application := PApp; // das Application-Objekt auf die Host-Anwendung einstellen
Form := TForm001.Create(PForm); // MDI-Child erzeugen
Form.ParentForm := PForm;
Form.ParentApplication := PApp;
Form.Show;
Application := dllApp; // das Application-Objekt zurücksetzen, damit die DLL vernünftig beendet werden kann
end;
hat jemand eine Idee warum das ganze nicht klappt.
Zur Laufzeit erzeugte MDI-Childs werden doch auch geöffnet.
Gruss
Stefan
Comment