delphi_dll文件详解副本.doc

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
非本人原创,从其他网络上下载而来的 一、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)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档