我想把DLL里的窗体显示在主程序界面上的Panel上,但试了很多方法都有点问题。不在DLL里建立的窗体一点击就能出现,可DLL里的有时能显示有时不能显示。下面是我的代码,是不是方法用错了?
主程序调用DLL代码:
type
TDllFrm = function (Panel: TPanel; App : TApplication; MainFrm: TForm): Boolean;StdCall;
procedure TForm1.Button1Click(Sender: TObject);
var
ShowDllFrm : TDllFrm;
DLLHandle : THandle;
begin
ClearPanel;
DLLHandle := LoadLibrary('Test.dll');
if DLLHandle <> 0 then
begin
@ShowDllFrm := GetProcAddress(DLLHandle, 'ShowFrm');
ShowDllFrm(panel1, Application, Form1);
end;
end;
DLL中代码:
function ShowFrm(Panel: TPanel; App : TApplication; MainFrm: TForm): Boolean;StdCall;
begin
Result := True;
Application := App;
Application.Handle := App.Handle;
Frm_UserDllForm := TFrm_UserDllForm.Create(Application);
try
Frm_UserDllForm.Parent := Panel;
Frm_UserDllForm.Align := alClient;
Frm_UserDllForm.Show;
except
Result := False;
end;
end;
主程序调用DLL代码:
type
TDllFrm = function (Panel: TPanel; App : TApplication; MainFrm: TForm): Boolean;StdCall;
procedure TForm1.Button1Click(Sender: TObject);
var
ShowDllFrm : TDllFrm;
DLLHandle : THandle;
begin
ClearPanel;
DLLHandle := LoadLibrary('Test.dll');
if DLLHandle <> 0 then
begin
@ShowDllFrm := GetProcAddress(DLLHandle, 'ShowFrm');
ShowDllFrm(panel1, Application, Form1);
end;
end;
DLL中代码:
function ShowFrm(Panel: TPanel; App : TApplication; MainFrm: TForm): Boolean;StdCall;
begin
Result := True;
Application := App;
Application.Handle := App.Handle;
Frm_UserDllForm := TFrm_UserDllForm.Create(Application);
try
Frm_UserDllForm.Parent := Panel;
Frm_UserDllForm.Align := alClient;
Frm_UserDllForm.Show;
except
Result := False;
end;
end;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货