如何确定动态链接库是何时卸载的?(50分)

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

wwh

Unregistered / Unconfirmed
GUEST, unregistred user!
rt,刚学dll创建不久,看了关于dll的出入口点的例子(相信有关这方面的书都有这个经典的例子).在我的dll中,需要一个长期存在的窗体,相当于exe的主窗体吧(不是mdi).于是在入口函数创建了这个窗体form1,另外一个窗体在显示时创建并show出来,export了两个函数showForm1,showForm2.程序非常简单:
入口点函数
procedure DLLEntryPoint(dwReason: DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
ShowMessage('Attaching to process');
form1:=TForm1.Create(Application);
end;
DLL_PROCESS_DETACH:
ShowMessage('Detaching from process');
end;
DLL_THREAD_ATTACH: MessageBeep(0);
DLL_THREAD_DETACH: MessageBeep(0);
end;
end;
exports
showForm1 index 1,
showForm2 index 2;
begin
DllProc:=@DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.
两个输出函数:(两个form都是close时free掉,所以form1不能show两次)
procedure showForm1();
begin
form1.Show;
end;
procedure showForm2();
begin
Application.CreateForm(TForm2,Form2);
Form2.Show;
end;
程序运行ok,奇怪的是,关闭form2的时候会卸载dll,因为会连通测试dll的执行程序一起退出(不是报错).而关闭form1却不会,按道理form1应该时主窗口吧,就算form2卸载了,form1还在阿,怎么就会退出了呢?而且是连调用它的程序都会退出???
还有入口函数不是很明白,因为退出的时候从来没出现过'Detaching from process'的提示,是例子的错吗?还是操作系统的问题(我的2000).
 
不用 Application.CreateForm(TForm2,Form2);
试试
Form2 := TForm2.Create(nil);

-----
http://www.8421.org
 
没用的,另外,这两个条语句应该是一样的吧,都是把实例赋给form2
 
接受答案了.
 
后退
顶部