调用DLL提示“无效窗口句柄”,为何?详情请进!
主程序调用格式
type
TShowFormDb=procedure(hand:THandle;const dbHandle: HDBIDB);
procedure TFrmMain.ShowDbForm(DllName :pchar;ProName:pchar);
var
LibHandle : THandle;
ShowFormDb:TShowFormDb;
begin
if database1.Connected=false then database1.Connected :=true;
if database1.Connected=false then
begin
application.MessageBox('数据库连接错误,系统不能正常工作!','警告信息',MB_OK+MB_ICONWARNING) ;
exit;
end;
LibHandle := LoadLibrary(DllName);
try
if LibHandle = 0 then
begin
showmessage('无法成功装入动态库');
exit;
end;
@ShowFormDb := GetProcAddress(LibHandle, ProName);
if not (@ShowFormDb = nil) then
ShowFormDb(Application.Handle,database1.Handle) ;
finally
FreeLibrary(LibHandle);
end;
end;
ShowDbForm('SetDll.dll','HandSetCopy');
DLL中实现
procedure HandSetCopy(Hand :THandle;const dbHandle:HDBIDB); StdCall;
begin
Application.Handle := Hand;
HandSetCopyForm := THandSetCopyForm.Create(Application);
with HandSetCopyForm do
try
dm.DB.Handle:=dbHandle;
ShowModal;
finally
Free;
end;
end;
调试程序到
HandSetCopyForm := THandSetCopyForm.Create(Application);
出现“无效窗口句柄”错误,不知什么原因,大家帮帮忙!