紧急求助!主程序关闭时如何关闭所有已经加载的dll及窗体?(100分)

  • 主题发起人 主题发起人 cnhotel
  • 开始时间 开始时间
C

cnhotel

Unregistered / Unconfirmed
GUEST, unregistred user!
现在的问题是:主程序显式调用aa.dll,bb.dll.这两个dll原来均是独立的exe文件后来编译为dll,当调用的aa.dll和bb.dll模块(都是非模式窗体),均正常关闭时,主程序也可以正常关闭
但是当aa.dll和bb.dll均打开时(都是非模式窗体),直接关闭主程序,主程序会失去响应..应该是没有释放的原因吧.在主程序的ondestroy事件中写了如下语句,应该就是释放的吧?
if HandleCall<>0 then
begin
FreeLibrary(HandleCall);
HandleCall:=0;
end;
断点调试主程序时,就听在 FreeLibrary(HandleCall);这里不得下去了...失去响应
另看得一些demo中的dll事件中:
往往都是showdllform和freedllform两个过程配套用,我知道这两个的含义一个是显示、一个是释放,但是不知道如何在主程序端调用相应dll中的freedllform这个过程来释放..
比如如何在主程序端点击某个按钮时调用如下的函数呢?
function FreeCkForm(pHandle: THandle):boolean;
begin
Application.Handle:=pHandle;

if wlgl_main_f.Showing then
wlgl_main_f.Close;

if not wlgl_main_f.Showing then
begin
wlgl_main_f.Free;
result:=true;
end else
result:=false;
end;

菜鸟非科班出身,自学,看了大富翁的一些帖子仍不明白,希望各位大大们路过帮看下、帮顶下~~~~
 
走过路过的兄弟姐妹们帮看看啊
 
汗,是因为这个问题很低级么?还是因为分数不够?
请各位帮看看啊
 
这两个dll原来均是独立的exe文件后来编译为dll>>>>>>>>>>>>>>>>>>>>>>>>
能说说你这个是怎么做的吗
我觉得是你的DLL的问题,但DLL还不是你自己写的,有些不好说
 
exe也是我做的啊,因为考虑到调用升级方便,新建了dll,把原来exe里面的窗体都添加到这个dll中编译下,可以引用的...
现在问题是如果不直接关闭调用的dll而是直接关闭主程序就会出现失去响应,程序关不掉的问题.还有种情况是主程序表面是关了但进程仍在运行...
请路过的大大们帮看看.分不够可以再加~~~
 
有没有把程序的句柄传给DLL啊,关闭的时候用Application.Terminate;
 
谢谢楼上的关注
&quot;程序的句柄传给dll&quot;,啥意思?可以调用dll的,但是释放有问题...
关闭的时候用Application.Terminate;一样不行
继续顶~~~
 
再顶...
 
把主程序的
TFormparam=Record
TITLE: String;
//FORM标题
TAG: INTEGER;
//FORM TAG
X,Y,Width,Height: INTEGER;
//FORM的初始坐标
PN:PNormal;//全局结构的指针
App : Tapplication;
Scr : Tscreen;
AppHandle: HWND;//应用程序句柄
Dm : Tsysdm ;//数据模块指针
Parentform: Tform;
Formname: string;
//窗体名
Wparam: string;//传递给窗体的参数
end;
等这些东西传给DLL,DLL返回打开窗体的指针,主程序关闭时再依次关闭窗体
 
应该做调用dll的一个退出函数,dll自己关,再free它
 
我会在调用主程序的Close方法后,启动一个线程,线程会在3秒后调用
ExitProcess($FFFFFFFF);
如果程序在3秒内结束不了就自杀.
 
谢谢各位的关注,结贴了~~~~~
 
后退
顶部