Delphi中DLL初始化和退出处理

Delphi DLL开发深度指南:从创建到调用的最佳实践 Delphi,作为一款强大的应用程序开发工具,提供了全面的DLL开发支持。本文将详细介绍Delphi中DLL的开发流程、调用方法以及相关的注意事项。Delphi提供的丰富功能和工具,使得DLL的开发和调用变得简单而直接。本文详细介绍了在Delphi中创建和使用DLL的最佳实践,包括创建步骤、初始化和清理、调用方法以及相关的注意事项。随着软件行业的发展,DLL的角色可能会有所变化,但它们在特定场景下仍然具有不可替代的优势。Delphi开发者可以期待更多的工具和特性来简化DLL的开发和调试过程。 阅读详情

Delphi中DLL初始化和退出处理

2010-01-08 8:56:43

<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非常
适合使用。

Python4Delphi:在Delphi应用中嵌入Python解释器的完整指南 在软件开发中,脚本语言嵌入是扩展原生应用能力的常见技术方案,其核心原理是通过桥接层在宿主进程中加载并控制外部解释器。这种技术能显著提升开发效率,允许开发者复用成熟的第三方生态库,实现“专业工具做专业事”的架构优势。Python作为当前最流行的胶水语言,拥有丰富的数据科学、机器学习与网络爬虫库,而Delphi则是经典的Windows原生应用开发平台。Python4Delphi(P4D)正是连接这两大生态的桥梁,它通过在Delphi进程中嵌入完整的Python解释器,让开发者能在保持VCL/FireMonkey 阅读详情

相关推荐

Delphi动态库封装与调用窗体实战实例

动态链接库(Dynamic Link Library,简称 DLL)是 Windows 平台下实现代码共享与模块化开发的重要机制。它允许将可执行代码、资源和数据封装为独立的模块,供多个应用程序在运行时动态调用,从而提高代码复用率与系统维护效率。在 Delphi 开发环境中,结合 DLL 技术对窗体进行封装调用,能够实现界面与逻辑的解耦,增强系统的扩展性与可维护性。通过将窗体封装在 DLL 中,主程序可以在运行时按需加载并显示窗体,达到插件式架构的效果。

weixin_42609225的博客 794

Delphi下DLL编程知识

DLL是编写Windows应用程序的关键组成部分。介绍了动态链接库(DynamicallyLoadable Library,DLL)的基本概念

无幻 8085

随机截距交叉滞后模型RI-CLPM:原理、Mplus实现与结果解读

纵向面板数据分析中,传统交叉滞后模型(CLPM)常被用于探索变量间的时序关系,但其估计结果可能混淆了个体间稳定差异与个体内短期波动,导致交叉滞后路径出现偏差。随机截距交叉滞后模型(RI-CLPM)通过引入随机截距因子,将个体特质层面的差异与个体内动态过程分离,从而提供更纯净的个体内效应估计。该模型在组织心理学、发展心理学、成瘾行为等研究领域迅速普及,并成为顶级期刊审稿时常见的稳健性检验要求。本文从原理出发,系统讲解RI-CLPM的模型构建、识别条件、Mplus实操代码、输出解读及常见陷阱,并结合协变量处理、

weixin_33525298的博客 276

Delphi DLL动态链接库的初始化和善后工作

一般的DLL不需要做初始化和善后工作,但如果想让DLL在被载入时先作一些初始设定,或者退出时释放资源,则可以用一下三种方法达到目的。     第一种方法:利用Unit的Initalization与Finalization这两个小节

xiongmao000738 4168

虚拟机扩容——非LVM分区

虚拟机扩容——非LVM分区

ytraister的博客 3905

你不必懂AI,但必须会用AI:写给所有焦虑中的职场人

AI时代不必焦虑学技术,关键在于用AI解决实际问题。文章指出,99%的人只需成为AI使用者而非建造者,核心竞争力在于结合业务痛点运用AI工具提升效率。与其盲目学习工具,不如梳理工作流程,识别可优化环节,让AI赋能重复性、标准化任务。行业经验与AI工具的结合才是真正的职场护城河。建议从具体工作场景出发,寻找匹配的AI解决方案,迈出应用第一步。

hundred98的博客 717

如何让windows平台多线程DLL完整退出

如果你在windows平台开发动态链接库,并且在链接库启动了内部线程,那么你很有可能发现加载你的DLL的程序在退出时会死锁,有时候虽然主程序界面没有了,但是打开任务管理器,发现进程还在。 虽然用户不觉得异常,但是最求完美的你,一定想让程序完整的退出,下面与你分享一下我这几天与这个问题奋战的经验总结。 最近做播放器插件开发,基于directshow、vlc、mplayer框架,各做了一个插件,三

luansxx的专栏 3711

Verilog实现SPI通信协议驱动设计

线性序列机实现SPI协议

H19981118的博客 6086

Delphi中DLL的其他应用

1.DLL的入口函数和出口函数    在编写DLL时可以在DLL项目文件的begin..end之间加入DLL的进入口函数和出口函数,全局变量DLLProc是一个过程指针,指定入口/出口函数,初始值为nil,只需将自己的出入口函数赋值给它即可,自己的出入口函数必须传入一个DWord

fly的专栏 6049

【WRF后处理】基于wrf-python处理wrf运行结果wrfout_d01

基于wrf-python处理wrf运行结果wrfout_d01

WW、forever的博客 5209

软考高级网络规划设计师教程(第3版)

"本书是由工业和信息化部教育与考试中心组织编写的考试用书,依据《网络规划设计师考试大纲》(2026年审定通过)编写。本书分为两篇:第一篇为网络规划与设计综合知识,其中第1章介绍计算机网络基础知识,第2章介绍网络互连与互联网,第3章介绍网络规划与设计的知识和方法,第4章介绍网络资源设备,第5章介绍网络安全技术,第6章介绍标准化和网络安全法规;第二篇为案例实践,其中第7章介绍网络规划案例,第8章介绍网络故障分析与处理案例,第9章介绍网络安全部署案例,第10章介绍网络规划与设计论文写作的指导思想和写作技巧。

鹿鸣天涯 3944

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

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33895695的博客 1298

华为OD机试新系统真题-魔法咒语组合(Java/Py/C++/Go/C/Js)

华为OD机试 新系统真题【魔法咒语组合】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【魔法咒语组合】多语言题解

qq_45776114的博客 669

delphi DLL 常见问题

字符串参数 前面曾提到过,为了保证DLL参数/返回值传递的正确性,尤其是为C++等其他语言开发的宿主程序使用时,应尽量使用指针或基本类型,因为其他语言与Delphi的变量存储分配方法可能是不一样的。C++中字符才是基本类型,串则是字符型的线形链表。所以最好将string强制转换为Pchar。 如果DLL和宿主程序都用Delphi开发,且使用string(还有动态数组,它们的数据结构类似)作为导

myfile的专栏 1089

BLDC&PMSM电机控制器硬件设计工程(三)控制器驱动芯片方案

在汽车电机控制系统中,栅极驱动IC扮演着至关重要的角色。它作为主控MCU与功率开关管(MOSFET/IGBT)之间的桥梁,将微弱的PWM信号放大为足以快速、可靠驱动功率管的强信号。本文将深入解析英飞凌、TI和NXP的车规级栅极驱动方案,重点关注半桥和单侧驱动IC。1)为什么需要栅极驱动器?栅极驱动器是低压控制器和高压电路之间的缓冲电路,用于放大控制器的控制信号,从而实现功率器件更有效的导通和关断。栅极驱动器的作用总结如下:1.将控制器的低压信号转化为更高电压的驱动信号,以实现功率器件稳定导通和关断。

小幽余生不加糖 494

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Delphi之在DLL中封装窗体---重点是理解一个Delphi项目的dpr文件和Application对象

先讲解一下大致原理 在DLL中可以封装窗体,需要解决的关键问题在于DLL中的Application对象和调用的Application对象是有区别的。 对于一般的应用程序来说,Application对象是VCL固定的,一般不需要修改Application对象指针。但是在DLL中,使用窗体或者使用Application对象时,那么使DLL的A...

weixin_34198881的博客 638

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Delphi开发DLL常见问题

字符串参数 前面曾提到过,为了保证DLL参数/返回值传递的正确性,尤其是为C++等其他语言开发的宿主程序使用时,应尽量使用指针或基本类型,因为其他语言与Delphi的变量存储分配方法可能是不一样的。C++中字符才是基本类型,串则是字符型的线形链表。所以最好将string强制转换为Pchar。 如果DLL和宿主程序都用Delphi开发,且使用string(还有动态数组,它们的数据结构类似)作为导

YanJinrong的专栏 2037

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Delphi制作DLL

一、开使你的第一个DLL专案   1.File->Close all->File->New﹝DLL﹞ 代码:   //自动产生Code如下   library Project2;   //这有段废话   uses   SysUtils,   Classes;   {$R *.RES}   begin   end.   2.加个...

weixin_30576859的博客 185

Delphi 多线程安全动态库 dll

Delphi 可以快速开发桌面程序,用来做dll 封装操作,封装窗体都是很方便的。在 delphi 做动态库时,会自动提示要 uses ShareMem,这个实际用起来是不方便的,因为 dll 可能要发布,要给其他人用,而别人用什么语言来开发是说不准的,如果不是delphi,就没办法用了。因此在接口上一般是用 pchar来代替string。但是在内部,string 还是可以拿来用的。这样就会产

2045

解决DLL调用问题

字符串参数 前面曾提到过,为了保证DLL参数/返回值传递的正确性,尤其是为C++等其他语言开发的宿主程序使用时,应尽量使用指针或基本类型,因为其他语言与Delphi的变量存储分配方法可能是不一样的。C++中字符才是基本类型,串则是字符型的线形链表。所以最好将string强制转换为Pchar。 如果DLL和宿主程序都用Delphi开发,且使用string(还有动态数组,它们的数据结构类似)作为导

sun_apple_123 456

Delphi笔记(整理)-DLL和BPL

动态调入库(dynamically loadable library)在Windows 下是一个动态链接库(dynamic-link library,DLL), 在Linux 下是一个共享目标库(shared object library) 导入过程或函数最简单的方法是用external 指示字声明它们,比如, 在Windows 下: procedure DoSomething; externa...

goingchan的专栏 698

原创 DLL编写经验总结(一)使DLL支持多线程

最近用Delphi编写DLL比较多,总结几条经验方便以后回顾。需求背景:DLL接口自身是向主调方提供服务,考虑到主调方的不定性以及响应速度问题,需要支持多线程。实现思路:DLL在初次加载或者被唤醒的时候会调用DLLMain函数(Delphi的Main函数头已被隐藏,实际上就是主文件中的Begin End),触发DLL_Process_Attach事件。可用全局变量DLLProc来处理触发的事件所调...

雅荷沁兰的专栏 5707
上一篇: DELPHI参数几个概念上的区别 收藏
下一篇: Delphi中的inc文件
一剑平江湖
博客等级 码龄18年 207粉丝 1070原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值