Delphi中DLL初始化和退出处理

来自delphibbs: zhousy_2000, 时间: 2005-09-13 13:53:00, ID: 3203484

<1>利用Unit的Initalization与Finalization这两个小节

  可以在Unit的这两个小节中安排Unit的进入和退出,但是

Program与Library并没有这两个部分,所以只能写在Unit中。

<2>利用ExitProc变量

  在Library的begin..end.中间是可以写代码的,这里可以放置

DLL初始化代码。如果想要做善后工作,则可以利用ExitProc变量。

我们首先在初始化代码中把ExitProc中包含的默认的善后过程地址保

存下来,然后把自定义的过程的地址赋给它,这样DLL退出时就会执

行我们制定的程序;在自定义的过程的最后,把ExitProc恢复原来的

默认值,以便DLL能够继续完成原来默认的善后工作。下面是示例:

  library MyDLL;

  ...

  OldExitProc: pointer;

  ...

  procedure MyExitProc;

  begin

  ... //善后程序

  ExitProc := OldExitProc;

  end;

  ...

  begin

  ... //初始化程序

  OldExitProc := ExitProc;{ 保存原来的退出过程指针 }

  ExitProc := @MyExitProc; { 安装新的退出过程 }

  end.

<3>利用DllProc变量

  和ExitProc一样,DllProc也是一个在Systemd单元中预定义的变

量。在使用DLLProc时, 必须先写好一个具有以下原型的程序:

  procedure DLLHandler(Reason: integer);

并在library的begin..end.之间, 将这个DLLHandler程序的执行地

址赋给DLLProc中, 这时就可以根据参数Reason的值分别作出相应的

处理。另外注意要将Windows单元加入uses子句。示例如下:

  library TestDLL;

  ...

procedure MyDLLHandler(Reason: integer);

begin

case Reason of

DLL_PROCESS_DETACH:

begin

ShowMessage('整个DLL的善後程序');

end;

DLL_Process_Attach:

begin

ShowMessage('整个DLL的初始化代码');

end;

DLL_Thread_Attach:

begin

ShowMessage('当主叫端开始一个Thread时');

end;

DLL_Thread_Detach:

begin

ShowMessage('当主叫端终止一个Thread时');

end;

end;

end;

//初始化代码

DLLProc := @MyDLLHandler;

MyDLLHandle(DLL_Process_Attach);

end.

由上例可以知道,当DLL支援多进程(Thread)的处理时, DllProc非常

适合使用

---------------------

作者:一剑平江湖

来源:CSDN

原文:https://blog.csdn.net/diligentcatrich/article/details/5526024

版权声明:本文为博主原创文章,转载请附上博文链接!