• 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
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    【Python】多态、协议和鸭子类型
    【Python】魔法方法之__call__,将对象当方法使用
    【Python】策略模式
    【Python】if 后怎么就可以跟对象?变量交换写法是语法糖吗?
    【Python 库】NumPy 超详细教程(3):ndarray 的内部机理及高级迭代
    【Python 库】NumPy 超详细教程(2):数据类型
    【Python 库】NumPy 超详细教程(1):NumPy 数组
    【杂谈】10 年三线小城 IT 开发的感悟
    【PostgreSQL】安装及中文显示
    【Python 库】轻量级 ORM 框架 peewee 用法详解之——增删改查
  • 原文地址:https://www.cnblogs.com/bwdblogs/p/10282217.html
Copyright © 2020-2023  润新知