DLL 问题,请教各位大虾(50分)

H

huawdg

Unregistered / Unconfirmed
GUEST, unregistred user!
FreeLibrary时,DLL没有响应事件,怎么回事?先谢了
DLL源码如下:
library Hello;
uses
SysUtils,Windows,Dialogs,
Classes;
{$R *.res}
procedure DLLEntryPoint(Reason:DWord);
begin
case Reason of
DLL_PROCESS_ATTACH:ShowMessage('Attach');
DLL_PROCESS_DETACH:ShowMessage('Detach');//FreeLibrary时,这里执行不到
end;
end;
begin
DllProc:=@DLLEntryPoint;
DllEntryPoint(DLL_Process_Attach);
end.
 
最好在Dll中不要用ShowMessage
而用MessageBox(0,....)
 
to 憔悴: ShowMessage没问题,因为DLL_PROCESS_ATTACH是正常的。
 
可以的呀,我刚才做了试验。能够触发FreeLibrary的那个Message。
procedure TForm1.Button1Click(Sender: TObject);
var
//_DLLEntryPoint:procedure(Reason:DWord);
ee:Cardinal;
begin
ee:=LoadLibrary('e:/temp/ss.dll');
//@_DLLEntryPoint:=GetProcAddress(ee,'DLLEntryPoint');
FreeLibrary(ee);

end;
 
你是怎么试的,我试了没有问题,在宿主程序里,我用了动态装载和静态装载:
动态装载:
procedure TForm1.LoadBtnClick(Sender: TObject);
begin
DllHandle := LoadLibrary('Hello.dll');
end;
//show了message Attach
procedure TForm1.FreeBtnClick(Sender: TObject);
begin
if DllHandle<> 0 then
FreeLibrary(DllHandle);
end;
//show了message detach
静态装载:
我在dll里exports了Sayhello方法,里面只有一句:ShowMessage(Hello);
然后在宿主程序里:
function SayHello():Integer;stdcall; External 'Hello.dll';
procedure TForm1.SayHelloBtnClick(Sender: TObject);
begin
SayHello;
end;
程序启动的时候show了Attach,结束的时候show了Detach.
 
我想起来了,你这种情况我的确遇到过,
同样的程序,在我自己的机子上可以,换了一台就不可以了。

 
谢谢各位,请再出出主意
 
是不是你的dll还被别的程序占用着,

有没有重起,并且不要在delphi环境运行试试?
 
我又试过了,还是不行。
跟操作系统有关吗?我是Win Me
 
这是不是Delphi 6的问题?
 
我的系统也是win me,也是delphi6
 
呜呼!我怎么办?
 
各位大侠,难道找不到原因吗?5555
 
至今未解决,再出出主意
 
今天将 D6 升级到 PACK 2,问题已解决!!

DETACH 时,ShowMessage 确实出错。

谢谢各位!
 

Similar threads

顶部