`
com1com4
  • 浏览: 157464 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Delphi笔记(整理)-DLL和BPL

阅读更多
动态调入库(dynamically loadable library)在Windows 下是一个动态链接库(dynamic-link library,DLL),
在Linux 下是一个共享目标库(shared object library)

导入过程或函数最简单的方法是用external 指示字声明它们,比如,
在Windows 下: procedure DoSomething; external ’MYLIB.DLL’;
在Linux 下: procedure DoSomething; external ’mylib.so’;

你可以直接调用操作系统的库函数来访问一个库中的例程,这些库函数包括LoadLibrary、FreeLibrary 和
GetProcAddress。在Windows 下,这些函数在Windows.pas 单元声明,在Linux 下,为了兼容性考虑,
它们在SysUtils.pas 单元实现,实际的Linux 例程是dlopen、dlclose 和dlsym(这些都在Kylix 的Libc 单
元声明)。此时,我们使用过程类型的变量来引用导入的例程。

当一个例程在exports 子句中列出时,它将被输出,它的格式如下
exports entry1, ..., entryn;

只有在Windows 下能使用索引说明符,它包括指示字index,后面跟一个介于1 到2,147,483,647 之间的
数字常量(为提高程序效率,使用较小的索引值)。若入口中没有指定索引,在输出表中例程被自动赋予
一个号码。

名称说明符包括指示字name,后面跟一个字符串常量。若入口没有名称说明符,例程被输出时使用声
明的原始名称,包括拼写和大小写。当要使用不同的名称输出一个例程时,使用name 子句。比如,
exports
DoSomethingABC name ’DoSomething’;

当在动态调入库中输出重载的函数或过程时,你必须在exports 子句中指定它的参数列表

exports 子句可出现在程序或库声明部分的任何位置,次数也不受限制,同样,当出现在单元的接口或实
现部分时,情况也是如此。程序很少包含exports 子句。

一个库的块(block)所包含的语句构成了库的初始化代码,每当库被调入时,这些代码执行一次。它们
的典型任务包括注册窗口类和初始化变量等。库的初始化代码也可以使用ExitProc 变量安装一个退出过
程(exit procedure),就像在Exit procedures 中描述的那样。退出过程在库被卸载时执行。
库的初始化代码通过设定ExitCode 变量为非0 来标记一个错误。ExitCode 在System 单元声明,默认值
时0。若库的初始化代码把ExitCode 设置为其它值,库将被卸载,调用程序被通知发生了错误。类似地,
若初始化代码执行中发生了未处理的异常,调用程序也将被通知调入库时失败。

在共享库中声明的全局变量不能被Object Pascal 程序导入。

使用IsLibrary 变量来确定代码是作为程序还
是库执行,IsLibrary 在程序中总是True,在库中总是False。在库的生命期内,HInstance 存储了它的
实例句柄,CmdLine 在库中总是nil。

DLLProc 变量允许一个库监测操作系统对它的入口点(entry point)的调用,这个特征通常只是由支持多
线程的库使用。DLLProc 在Windows 和Linux 下都存在,但用起来不同。在Windows 下,DLLProc 用
于多线程程序,在Linux 下,它用来判断库何时被卸载。对所有的退出行为,你应该使用finalization
sections,而不是退出过程。

在Windows 下,若DLL 输出的例程以长字符串或动态数组作为参数或者作为函数的返回值(不管是直
接的,还是通过记录或对象封装的),那么,DLL 和它的客户程序(或DLL)必须使用ShareMem 单元;
当一个程序或DLL 调用New 或GetMem 分配内存,而在另一个模块中调用Dispose 或FreeMem 来释放
内存时,上面的规则同样适用。ShareMem 单元应当在程序或库的uses 子句中第一个列出。
ShareMem 是BORLANDMM.DLL 内存管理器的接口单元,它允许在模块间共享动态分配的内存。
BORLANDMM.DLL必须连同使用ShareMem单元的程序和DLL一同发布。当程序或DLL使用ShareMem
时,它的内存管理器被BORLANDMM.DLL 中的取代。
Linux 使用glibc 的malloc 来管理共享内存。

为了区分包和其它库,包被存储在文件
• 在Windows 下,包的扩展名是.bpl(Borland package library)
• 在Linux 下,包通常以前缀bpl 开始,扩展名是.so。
通常,程序启动时包被静态调入,但你可以使用LoadPackage 和UnloadPackage 例程(在SysUtils 单元)
来动态调入包。

包源文件不包括类型、数据、过程或函数声明。取而代之的是,它包含
• 包的名称;
• 它所需要的其它包的列表。这些包被链接到新包中;
• 包被编译时所包含的(或绑定的)单元文件列表。包实际上是这些代码单元的一个外包装,这些单
元为编译后的包提供功能。
包的声明有如下形式:
package packageName;
requiresClause;
containsClause;
end.
package DATAX;
requires
baseclx,
visualclx;
contains Db, DBLocal, DBXpress, ... ;
end.
分享到:
评论

相关推荐

    电影票房.csv

    电影票房

    ASP.NET技术在网站开发设计中的研究与开发(论文+源代码+开题报告)【ASP】.zip

    ASP.NET技术在网站开发设计中的研究与开发(论文+源代码+开题报告)【ASP】

    WebShell-Password.txt

    WebShell-Password

    基于 Unet++ 对自动驾驶车道线分割实战【包含数据集、完整代码、训练好的结果】

    基于 UnetPlusPlus 网络自动驾驶车道线分割实战 代码均为手写,全网无重复,训练自己数据很简单,只需要摆放好数据即可,具体参考README文件,小白均可使用 代码详细介绍:https://blog.csdn.net/qq_44886601/article/details/138858574 数据集:自动驾驶车道线分割(2类别,约3200张数据和标注图像) 网络仅仅测试30个epoch,全局像素点的准确度达到0.995,精确度为0.907,召回率为0.908,dice为0.91,训练epoch加大的话,性能还会更加优越! 代码介绍: 训练过程提供了多种优化器选择(Adam、SGD、RMSProp),损失函数采用BCE 逻辑损失,学习率的衰减提供了常规恒定lr、余弦退火算法、以及step学习率衰减。可以自行选择 【训练过程会生成最好和最后一个权重,以及数据预处理完的可视化效果图、dice、loss曲线、训练日志等等】

    asp.net某公司员工管理系统的设计与实现(源代码+论文)【ASP】.zip

    asp.net某公司员工管理系统的设计与实现(源代码+论文)【ASP】

    grpcio-1.16.0-cp36-cp36m-macosx_10_7_intel.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    grpcio-1.20.0-cp34-cp34m-manylinux1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于Java的个人理财管理系统(源码+论文+需求分析+数据库文件+演示视频).zip

    随着社会的发展,人们的生活水平的不断提高,人们在理财投资方面,已经有着很高的认识度了。人们的管理生活已经离不开网络。未来社会人们的生活和管理将越来越依赖于数字技术的发展,越来越数字化、网络化、电子化、虚拟化。Internet的发展历程以及目前的应用状况和发展趋势,可以充分地相信网络技术将极大的改变我们的生活和工作方式,甚至社会的价值观也会发生某种变化。 本设计尝试用JSP在网络上架构一个投资理财管理系统,本文从理论和实践两个角度出发,对一个具有数据挖掘功能投资理财管理系统进行设计与实现分析。论文首先较为详尽地介绍了管理课程的有关概念与知识,特别介绍了相关延伸表现形式,本统系统是运用JSP技术来实现的。其主要功能有:系统用户管理,收入记录, 支出记录,财产查询,还贷助手,储蓄提醒等。论文在撰写过程中,力求将理论与实践应用相结合,对各种理论进行阐述的同时配合系统从实际应用和操作技巧上加以说明,希望能够更充分地体现到这些知识与技术在本系统中的应用与实现。

    毕设新项目-基于图像处理的喷码缺陷检测python源码+详细项目说明+模型+数据集.zip

    毕设新项目-基于图像处理的喷码缺陷检测python源码+详细项目说明+模型+数据集.zip 【项目介绍】 瑕疵 在喷码位置确定一视野范围,以正常喷码样品视野内黑色面积为标准 * 漏喷 黑色覆盖面积小于正常喷码 * 喷码偏移 喷码超视野范围,视野内覆盖面积达不到标准要求 * 喷码模糊 * 字符缺失 采用OCR(光学字符识别技术)对喷码内容进行提取,和预定字符进行对比 * 打花 基于目标检测方案(找到每一个字符的位置及其所属类别,然后判断字符是否存在缺陷) (1)两阶段算法——基于候选区域 R-CNN,Faster R-CNN,先利用某些候选区域方法产生目标候选框,再判断候选框是否包含要检测的目标(检测效果好,尤其在小目标检测方面,但是速度相比一阶算法慢很多) 更多见项目说明!!! 【优质项目推荐】 1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 2.项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。

    在准备618节日相关的IT资源的建议

    在准备618节日相关的IT资源的建议

    ASP+ACCESS订单管理系统设计(论文+源代码+任务书)【ASP】.zip

    ASP+ACCESS订单管理系统设计(论文+源代码+任务书)【ASP】

    asp+ACCESS酒店房间预约系统设计(源代码+论文)【ASP】.zip

    asp+ACCESS酒店房间预约系统设计(源代码+论文)【ASP】

    ASP.NET某店积分更新记录管理(源代码+论文)【ASP】.zip

    ASP.NET某店积分更新记录管理(源代码+论文)【ASP】

    静态链接器 vs. 动态链接器:选择合适的链接方式"

    链接器 二、链接器主要任务: GNU ld(链接器)是用于将多个目标文件(包括目标文件、共享库、目标文件的归档文件等)合并成一个可执行文件或共享库的重要工具。它的主要功能包括:符号解析和重定位:链接器识别并解析输入文件中的符号引用,然后执行重定位操作以确保这些引用指向正确的地址。这包括将模块中的符号引用与其定义进行匹配,以便在合并时连接它们。 合并输入文件:链接器将多个输入文件中的代码段、数据段等模块合并成一个单一的地址空间。这包括将不同模块中的代码和数据安排到正确的内存地址中。 生成输出文件:链接器将合并的模块和符号表等信息写入输出文件中,该输出文件可以是可执行文件、共享库、目标文件等,具体类型取决于链接器的参数和配置。 符号表处理:链接器生成输出文件的符号表,其中包含了可供调试和动态链接器使用的符号信息。 处理重定位信息:如果存在重定位信息,链接器将生成重定位表,用于在加载时修正代码和数据的地址。这使得程序可以在不同的内存地址上运行。 处理链接器脚本:链接器可以根据链接器脚本(linker script)中的规则和指令来组织和排列模块,以满足特定需求。链接器脚本可以

    操作系统实验三银行家算法.docx

    操作系统实验三银行家算法

    基于ASP网络办公OA系统设计(论文+源代码+开题报告+答辩PPT)【ASP】.zip

    基于ASP网络办公OA系统设计(论文+源代码+开题报告+答辩PPT)【ASP】

    基于Java的工会会员管理系统(源码+论文+需求分析+数据库文件+演示视频).zip

    计算机对工会会员信息进行管理,具有人工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性强、存储量大、保密性能好等。这些优点能够极大地提高工会会员管理的工作质量和效率,也是工会管理的科学化、规范化、信息化管理的重要条件。另外随着计算机网络的持续发展,无论是工作、学习还是生活,将会越来越多地融入到流动的比特中,人们的工作节奏在不断加快,需要快捷的信息来源,并对此做出快速反应。 ; 二级工会会员管理系统 开发环境:MyEclipse,SQL Server 2005数据库,Tomcat6.0,Struts2+Spring+Hibernate技术整合。 实现的功能模块: 登录模块 部门信息管理模块 会员信息管理模块 报表信息管理模块 登录 注册 查看详细信息 修改 删除信息

    基于python的模板数字识别程序

    基于python的模板数字识别程序

    cryptography-37.0.0-cp36-abi3-win32.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    密码学之AES加密算法代码

    AES加解密实现代码

Global site tag (gtag.js) - Google Analytics