- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
非本人原创,从其他网络上下载而来的
一、DLL动态链接库文件的知识简介:
????????????????? Windows的发展要求允许同时运行的几个程序共享一组函数的单一拷贝。动态链接库就是在这种情况下出现的。动态链接库不用重复编译或链接,一旦装入内存,Dlls函数可以被系统中的任何正在运行的应用程序软件所使用,而不必再将DLLs函数的另一拷贝装入内存。 任何应用程序都可以共享由装入内存的DLLs管理的内存资源块。只包含共享数据的DLLs称为资源文件。在Delphi中,一般工程文件的头标用program关键字,而DLLs工程文件头标用library 关键字标识(ActiveX控件也是一样)。不同的关键字通知编译器生成不同的可执行文件。用program关键字生成的是.exe文件,而用library关键字生成的是.dll等其他文件;假如要输出供其它应用程序使用的函数或过程,则必须将这些函数或过程列在Exports子句中。而这些函数或过程本身必须用export编译指令进行编译。、
使用DLL动态链接库技术主要有以下几个原因:
1、减少可执行文件的大小;
2、实现资源共享;
3、便于维护和升级
4、比较安全
?
二、DLL动态链接库文件的分类:
根据DLLs完成的功能,我们把DLLs分为如下的三类:
1、完成一般功能的DLLs;
2、用于数据交换的DLLs;
3、用于窗体重用的DLLs。
?
三、DLL动态链接库文件的基本格式如下:
library? Project1; ??// 定义DLL文件的文件名,也是库名。和Unit差不多,会随保存时的文件名一起改变
uses
SysUtils,
Classes,
? Unit1 in Unit1.pas {Form1}, // 创建的窗体文件
? Unit2 in Unit2.pas;? ?// 创建的单元文件
?
Type
?? // 定义自己的数据类型
?
Var
? ?// 定义变量。
?
??? ?// 自己定义的函数
function?? TestDll(i:integer):integer;stdcall; // 与平时的编写差不多,只是多了一个stdcall参数
begin
Result := i+i;
end;
?
{$R *.res}? // 设置版本信息Project|options,必须有{$R *.res}才能显示。也可以位于函数的定义之前。
?
???? // 自己定义的函数
exports ??// 将函数或过程输出,供其他程序使用。不用写参数和调用后缀。函数直接用‘,‘分开;
????? TestDll;
begin
end.
?
四、创建和调用DLL动态链接库的基本步骤:
1、点击【File】—【New】—【Other】菜单项,打开【New Items】,选择【New】;
2、选择【Dll?Wizard】选项卡,点击ok,DLL工程创建成功。
3、添加代码。
4、按【Project】的【Build Project1】生成DLL动态链接库文件Project1.DLL。
5、调用DLL动态链接库文件。
???????????? ?? //调用程序和Project1.dll在同一个目录中,在implementation下面写, external后指定了Delphi.dll的位置
?????1、function TestDll(i:integer):integer;stdcall; external ‘Project1.dll’;
???????? ??? ? //TestDll 必须跟Dll中函数名一样,区分大小写;Project1不区分大小写;
??? ?2、使用就跟普通的函数是一样的。 ?
?
五、编写DLL动态链接库时,应该注意的事项:
1、在DLL中编写的函数或过程都必须加上stdcall调用参数。
?????????????????????? 在Delphi 1或Delphi 2环境下该调用参数是far。从Delphi 3以后将这个参数变为了stdcall,目的是为了使用标准的Win32参数传递技术来代替优化的register参数。忘记使用stdcall参数是常见的错误,这个错误不会影响DLL的编译和生成,但当调用这个DLL时会发生很严重的错误,导致操作系统的死锁。原因是register参数是Delphi的默认参
数。如果确实,就会变成register了。
?
2、所写的函数和过程应该用exports语句声明为外部函数。
?????????????????????? 正如大家看到的,TestDll函数被声明为一个外部函数。这样做可以使该函数在外部就能看到,具体方法是单激鼠标右键用“快速查看(Quick View)”功能查看该DLL
文档评论(0)