procedure DllMain(Reason: Integer); register;
begin
case reason of
DLL_PROCESS_ATTACH: //整个DLL的初始化代码
begin
// library enter code
SaveApplication := Application;//调试发现装载时没执行此分支. 所以在初始化代码处显示调用.
DLLScreen := Screen;
Application.Initialize;
if Application.Handle = 0 then
begin
Application.CreateHandle;
end;
Application.Run;
// dm:=TDM.Create(Application);
end;
DLL_PROCESS_DETACH: //整个DLL的善後程序
begin
b_Terminated:=True;
Application := SaveApplication;
Screen:=DLLScreen;
// library exit code
// Application := DLLApp;
// Screen := DLLScr;
CoUninitialize;
//dm:=TDM.Create(Application);
end;
DLL_THREAD_ATTACH: //当主叫端开始一个Thread时
;
DLL_THREAD_DETACH: //当主叫端终止一个Thread时
;
end;
end;
begin
CoInitialize(nil);
DllMain(DLL_PROCESS_ATTACH);
DLLPROC := @DllMain; //dll入口函数.调试发现是在释放dll时执行DLL_PROCESS_DETACH分支.
end.
在 DLL 需要自己消息循环时,Application.Handle 不可为0,如果为0,如果为0,则 Synchronize 同步 SendMessage PostMessage 等均有可能不可用
而通过
Application.Initialize;
if Application.Handle = 0 then
begin
Application.CreateHandle;
end;
Application.Run;
代码,则可实现delphi DLL中自己的消息循环