Delphi中DLL初始化和退出处理DLL_Process_Attach

<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.get

<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;it

end;io


//初始化代码
DLLProc := @MyDLLHandler;
MyDLLHandle(DLL_Process_Attach);
end.
由 上例能够知道,当DLL支援多进程(Thread)的处理时, DllProc很是
适合使用。
本文来自Delphi之窗,原文地址:http://www.52delphi.com多进程

相关文章
相关标签/搜索