dll的问题!(50分)

  • 主题发起人 主题发起人 whaoph
  • 开始时间 开始时间
W

whaoph

Unregistered / Unconfirmed
GUEST, unregistred user!
在调用DLL的过程中,碰到这样一个问题:当我释放DLL句柄的时候,主调用程序的窗口
就会隐藏到桌面后面,但在任务栏里还能看到,情形就像是主调用程序的窗口被最小化
了一样,但实际上又不是最小化,而是被放到了桌面后面
请问各位大侠有没有碰到过这种情况?该如何解决?
 
进入DLL时保存Application.handle,退出时恢复Application.handle.
 
hanyongjian:
好像还是不行啊
 
下面那个例子是我写的一个dll调用,但并没有发现你所说的情况,无论中间是否由其他操作,都完全可以退回到调用的Application,关键在于handle在谁手中
--------------------------------------
unit _UserInfo;

interface

uses stdctrls,sysutils,classes,windows,Dialogs,_Verify;

type
TMakeUserInfo = procedure (g_User:string;ahandle:Thandle);stdcall;

procedure GetFormUserInfo;

implementation

procedure GetFormUserInfo;
var
MakeUserInfo:TMakeUserInfo;
SysHandle:THandle;
begin
SysHandle:=0;
try
if SysHandle=0 then
begin
try
SysHandle:=LoadLibrary('UserInfo.Dll');

if not (SysHandle=0)
then
try
@MakeUserInfo:=GetProcAddress(SysHandle,'MakeUserInfo')
except
MessageDlg('UserInfo.Dll 内存地址定位失败',mterror,[mbok],1);
end
else
MessageDlg('UserInfo.Dll 载入内存失败',mterror,[mbok],1);

if not (@MakeUserInfo=nil) then
MakeUserInfo(G_USER,SysHandle);

finally
FreeLibrary(SysHandle);
end;
end;
except
on E:Exception do
begin
MessageDlg('错误:'+#13+E.Message,mterror,[mbok],1);
end;
end;
end;

end.
 
我认为可能和dll无关,只是程序写的有问题,
进程未死,界面已完蛋了而已
 
sanoul,
我的调用程序其实和你的一样,但还是会出这个问题
sdzzg,
界面也没有完蛋,只是好像隐藏到了桌面后面,点击任务栏中的窗口还是会显示出来
 
不是吧,每次freelibrary以后都会把handle激活得呀
 
你要是传application 进去 就没这种情况
我试过很多次了
 
而且,我在同一个主调用程序中调用两个DLL,这两个DLL的被调用方式一样,其中一个正常,
另一个却会出现这种情况
 
你的情况很可能激活了桌面窗口!
 
已经解决
情况刚好相反,当我不传递Application的句柄时,就不会出现这种问题了
但为什么传递Application的句柄时,会出现这种情况呢?有哪位大侠知道?
晚上散分
 
多人接受答案了。
 
后退
顶部