前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Delphi中DLL初始化和退出处理DLL_Process_Attach

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

作者头像
战神伽罗
发布2019-07-24 14:26:12
1.5K0
发布2019-07-24 14:26:12
举报

<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非常 适合使用。 本文来自Delphi之窗,原文地址:http://www.52delphi.com

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档