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

Delphi中DLL初始化和退出处理的更多相关文章

  1. Delphi中DLL的创建和使用(转)

    Delphi中DLL的创建和使用     1.DLL简介:   2.调用DLL:   3.创建DLL:   4.两个技巧:   5.初始化:   6.例外处理.            1.DLL简介  ...

  2. Delphi中DLL的创建和使用

    参考:http://blog.csdn.net/ninetowns2008/article/details/6311663 结合这篇博客:http://www.cnblogs.com/xumenger ...

  3. Delphi中DLL的其他应用

    http://blog.csdn.net/zhenghui1/article/details/6618273 1.DLL的入口函数和出口函数 在编写DLL时可以在DLL项目文件的begin..end之 ...

  4. delphi中DLL编程详解

    10.1 Windows的动态链接库原理 动态链接库(DLLs)是从C语言函数库和Pascal库单元的概念发展而来的.所有的C语言标准库函数都存放在某一函数库中,同时用户也可以用LIB程序创建自己的函 ...

  5. delphi 中DLL的建立

    Dll的创建与调用   File ->New->Other->Dll Wizard  DLL的创建 //可以将本代码复制粘贴到项目中 library Project1; uses S ...

  6. [转]Delphi 中动态链接库(dll)的建立和使用

    动态链接库是一个能够被应用程序和其它的DLL调用的过程和函数的集合体,它里面包含的是公共代码或资源.由于DLL代码使用了内存共享技术,在某些地方windows也给了DLL一些更高的权限,因而DLL中可 ...

  7. 在Delphi中静态调用DLL

    在Delphi中静态调用DLL top 调用一个DLL比写一个DLL要容易一些.首先给大家介绍的是静态调用方法,稍后将介绍动态调用方法,并就两种方法做一个比较.同样的,我们先举一个静态调用的例子. u ...

  8. Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

    Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...

  9. 在Delphi中使用C++对象(两种方法,但都要改造C++提供的DLL)

    Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难找到Delphi或Pascal的解决方案.可是却可能找到了一个相关的C++类.本文描述几种在Delphi代码中使 ...

随机推荐

  1. vue遍历时添加个数过滤条件

    1.效果 本身有5个地址,显示3个 2.address.html <!DOCTYPE html> <html lang="en"> <head> ...

  2. MXNET:深度学习计算-GPU

    mxnet的设备管理 MXNet 使用 context 来指定用来存储和计算的设备,例如可以是 CPU 或者 GPU.默认情况下,MXNet 会将数据创建在主内存,然后利用 CPU 来计算.在 MXN ...

  3. nginx配置http为1.0到1.1

    转载自:https://blog.csdn.net/u014558668/article/details/79237020 需求:接口通过nginx转发服务器,接收不到数据,但是测试环境是好的: 环境 ...

  4. 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED

    实验原理: 通过STM32的三个GPIO口驱动三色LED的三个通道,设定GPIO为推挽输出模式,采 用灌电流方式与LED连接,输出高电平LED灭,输出低电平LED亮,通过系统定时器实现 1s定时,每秒 ...

  5. Oracle分析函数-排序排列(rank、dense_rank、row_number、ntile)

    (1)rank函数返回一个唯一的值,除非遇到相同的数据时,此时所有相同数据的排名是一样的,同时会在最后一条相同记录和下一条不同记录的排名之间空出排名. (2)dense_rank函数返回一个唯一的值, ...

  6. Java知多少(58)线程Runnable接口和Thread类详解

    大多数情况,通过实例化一个Thread对象来创建一个线程.Java定义了两种方式: 实现Runnable 接口: 可以继承Thread类. 下面的两小节依次介绍了每一种方式. 实现Runnable接口 ...

  7. 用opencv抽取视频的帧并保存为连续的图片

    转自http://blog.csdn.net/timidsmile/article/details/8283319 #include"stdafx.h" #include < ...

  8. WCF ChannelFactory<T> WCF Channel and ChannelFactory Caching

    https://stackoverflow.com/questions/3200197/creating-wcf-channelfactoryt?rq=1 https://stackoverflow. ...

  9. 如何使用点击事件弹出一个url的iframe选项卡

    在一些前后端对接的接口中,前端需要根据后端返回进行跳转,但是有时候需要跳转的地址是不固定的,需要前端灵活的根据接口进行跳转,于是,url被放在接口中返回,而前端想打开一个新窗口的话就会比较麻烦,因为c ...

  10. iOS 判断App启动方式

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launc ...