Es geht mir vorerst nur um das mehrfache laden der
dll so das ich den Code der
DLL sowie das Formular aus der
dll mehrfach und unabhängig voneinander nutzen kann...
Die exporitere funktion der
DLL
Delphi-Quellcode:
function StartMainWndEx(
handle : Hwnd): hwnd;
begin
try
if MainWnd =
nil then
begin
MainWnd := TMainWnd.Create(
nil);
MainWnd.ParentWindow :=
handle;
...
MainWnd.show;
end
else begin
MainWnd.ParentWindow :=
handle;
MainWnd.show;
end;
result := MainWnd.Handle;
except
result := 0;
end;
end;
Die Hauptanwendung lädt dann dieses Formular und zeigt es auf seinem Formular an. Geladen wird das ganze in der Hauptanwendung :
Delphi-Quellcode:
type
Tdllhandle = record
dllhandle : THandle;
StartMainWndEx : function(owner : Hwnd): hwnd;
StartMainWnd : function :hwnd ;
...
end;
TDesktopObject = object
dlldata : Tdllhandle;
ObjectFile : String;
ID : integer;
PosX,PosY : integer;
Width,Height : integer;
BackgroundPanel : TPanel;
MainWnd : hwnd;
procedure LoadObject;
end;
var
DesktopObjects : array of TDesktopObject;
procedure TDesktopObject.LoadObject();
begin
if dlldata.dllhandle<>0 then
begin
BackgroundPanel.Free;
freelibrary(dlldata.dllhandle);
end;
dlldata.StartMainWndEx:=nil;
dlldata.StartMainWnd:=nil;
dlldata.dllhandle:=0;
BackgroundPanel := TPanel.Create(MainForm);
...
try
dlldata.dllhandle := LoadLibrary(pchar(ExtractFileDir(Application.ExeName)+'\Objects\'+ObjectFile));
if dlldata.dllhandle <>0 then
begin
@dlldata.StartMainWnd := GetProcAddress(dlldata.dllhandle,'StartMainWnd');
@dlldata.StartMainWndEx := GetProcAddress(dlldata.dllhandle,'StartMainWndEx');
end;
MainWnd:=dlldata.StartMainWndEx(BackgroundPanel.Handle);
BackgroundPanel.Show;
except
end;
end;