- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi中的DLL封装和调用对象技术-Read
Delphi 中的DLL 封装和调用对象技术
本文刊登2003 年10 月份出版的 Dr.Dobbs 软件研发 第3 期
刘 艺
摘 要
DLL 是一种应用最为广泛的动态链接技术 但是由于在DLL 中封装和调用对象受到对
象动态绑定机制的限制 使得DLL 在封装对象方面有一定的技术难度 导致有些Delphi 程
序员误以为DLL 只支持封装函数 不支持封装对象 本文着重介绍了DLL 中封装和调用对
象的原理和思路 并结合实例给出了多种不同的实现方法
关键字 动态链接库 DLL 对象 接口 虚方法 动态绑定 类引用 面向对象
1 物理封装与动态链接
物理上的封装意味着将程序封装成若干个独立的物理组成部分 各部分之间通过动态链
接共同完成系统的功能 而且各个物理组成部分可以单独维护和编译 不影响其他部分 要
理解物理封装首先要搞清楚静态链接和动态链接
在Delphi 中 如果程序的各个模块分别保存在不同的单元文件中 并通过uses 指令来
互相调用 这就是一个典型的静态链接 于是各个静态的子例程编译之后 连接器从Delphi
编译过的单元 或静态库 中取出子例程编译代码并添加到执行文件中 最终EXE 文件包
括了程序及其所属单元的所有代码 显然 静态链接的单元或模块最终以一个独立的物理形
式 可执行文件 存在 除了自己编写的单元文件 Delphi 还自动uses 了一些预设的单元
如 Windows Messages 等 这些都是静态链接
静态链接无法实现物理上的切割和封装 而且一旦其中某个单元或模块改动 其他所有
单元或模块都得随之重新编译和连接
用于实现物理切割和封装的bpl 包 DLL 动态链接库或 COM+组件都是一种动态链接
的形式 在动态链接情况中 连接器只使用子例程external 声明中的信息在执行文件中产生
一些数据表格 当Windows 向内存中装载执行文件时 它首先装载所有必需的DLL 然后
程序才会启动 在装载过程中 Windows 用函数在内存中的地址填充程序的内部表格
每当程序调用一个外部函数时 它就会使用该内部数据表格直接对DLL 代码 它当前
装载在程序的地址空间中 进行调用 注意 该模式不会涉及两个不同的应用程序 DLL
已经变成了应用程序的一部分 并装载在同一地址空间 所有参数的传递都发生在堆栈上
与其它任何函数调用一样 这里我们不打算讨论 DLL 的编译 因为我们首先想重点介绍
Delphi 中的DLL 封装和调用对象技术
2 用DLL 封装对象
DLL Dynamic Link Library 动态链接库 就目前来讲已经不再是什么新技术 读者可
以在书店过时的Delphi 书籍里随便找到讨论DLL 编程的章节 但这些涉及DLL 编程的书
中几乎都是谈论用DLL 来封装函数的 实际上大量的程序员也是在使用DLL 来封装函数
或面向过程的一个模块 一个函数集合 而在这里 我只想讨论如何用DLL 来封装对象
这可能是读者未曾有过的DLL 使用经验 但这却是这本完全围绕面向对象编程的书中重要
的部分之一 或许你能从中发现一些与众不同的实用技巧
参见 考虑到目前关于DLL 的现成资料很多 这里我省略了DLL 的基本知识和编写
方法 假设读者已经有了一定的DLL编程基础 如果你没有这样的基础 建议参阅
拙作 Delphi6企业级解决方案及应用剖析 DLL编程技术 一节 P271
一般来说 使用DLL 封装对象主要有以下好处
节约内存 多个程序可以使用同一个DLL 时 该DLL 只需加载一次 而且可以只
在使用时加载 不用时销毁
使程序代码实现复用 这就是说用DLL 封装的对象可以重复使用 甚至可以让不
同的程序语言调用
使程序模块化 组件化 这样利于团队开发 维护和更新方便
然而DLL 在封装对象方面却有一定的技术难度 这方面资料极少 甚至有的程序员误
以为DLL 只支持封装函数 不支持封装对象
通过研究 我们发现DLL 在封装对象上主要的限制在于
调用DLL
您可能关注的文档
- 2012中国软件盗版率调查报告.DOC
- 104110桃园创思指导实务技巧-桃园国民教育辅导团.PPT
- 2013各学院专利授权一览表.DOC
- 20140408-2014年国家大学生创新创业训练计划立项-南京农业大学.DOC
- 2014山东中考数学试题威海卷.DOC
- 20150923105234_解析卷简_第七课_纸船印象.DOC
- 2015年山东申论C类-小麦公考.PDF
- 2014GAIN·3月A00级别场价格变化指数为-乘用车场信息联席会.PPT
- 2015年行业指导职业院校专业改革与实践项目J4大棚立体栽培草莓生产.PDF
- 2015简化的联合再认范式中情绪对错误记忆影响的年龄差异心理.PDF
- DellEMC引导优化的服务器存储-S1用户.PDF
- DellEMCXC6320系列超融合设备解决方案.PDF
- DHCP服务器返回IP地址DHCP服务器和客户端的要求DHCP服务器.PPT
- DMWProjectListasat31102010地区小型工程项目截至二零一零.PDF
- DVD清单编码名称编码名称A-1ABEAUTIFULMIND美丽的风Y-1.PDF
- DiGeorge症病友联谊见证奇迹粒线体缺陷医疗讲座暨联谊活动圆满落幕.PDF
- D染色质和染色体的形态结构.PPT
- FinaCap金融机构处置机制吸收亏损能力规定——银行界规则.PDF
- Excel初级操作与应用Excel初级操作与应用.PDF
- FAST19波束脉冲星漂移扫描巡天模拟.PDF
最近下载
- 高考生物临考必背【新教材新高考 生物考前必背核心知识】选必2 生物与环境.docx VIP
- 重庆市社区公共服务设施规划布局与设置标准.pdf VIP
- 尽管去做无压工作中文版.doc
- 2021年7月成都市龙泉驿区(卫生类)招聘考试《护理学》试卷.docx VIP
- 滨江项目CSM水泥土搅拌墙施工方案.pdf VIP
- 国家开放大学汉语言文学本科《古代小说戏曲专题》期末纸质考试第二大题填空题库[2025春期版] .docx VIP
- 湖南省长沙市望城区2024-2025学年八年级下学期物理期末试题.pdf VIP
- 国家开放大学汉语言文学本科《中国现代文学专题》期末纸质考试第二大题填空题库[2025春期版].doc VIP
- 网课知到 语言学概论智慧树答案.docx VIP
- (最新)职业院校教学能力比赛《教学实施报告》模板.docx VIP
原创力文档


文档评论(0)