ImageVerifierCode 换一换
格式:DOCX , 页数:5 ,大小:16.68KB ,
资源ID:7199418      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7199418.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Delphi 中动态链接库DLL的建立和使用Word文件下载.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

Delphi 中动态链接库DLL的建立和使用Word文件下载.docx

1、DLL则不同,它即使被某个工程调用,编译后仍是独立的,也就是说编译后,一个DLL库形成一个单独的可执行文件,而不与任何其它的可执行文件连接在一起,因而DLL库并不从属于某个特定的工程,当多个工程调用同一个DLL库时只有第一个工程把DLL库调入内存,其余工程并不重复调入同一个DLL库到内存,而是到同一个共享内存区读取。并且,DLL的执行代码是在程序运行期间动态调入的,而不是如unit在程序运行时就与整个工程一起调入内存。这样便可消除unit带来的相同代码多处占用内存的弊病。二 Delphi中DLL库的建立在Delphi环境中,编写一个DLL同编写一个一般的应用程序并没有太大的区别。事实上作为DL

2、L主体的DLL函数的编写,除了在内存、资源的管理上有所不同外,并不需要其它特别的手段。一般工程文件的格式为program工程标题;uses子句;程序体而DLLs工程文件的格式为library 工程标题;uses 子句;exprots 子句;它们主要的区别有两点1.一般工程文件的头标用program关键字,而DLL工程文件头标用library 关键字。不同的关键字通知编译器生成不同的可执行文件。用program关键字生成的是.exe文件,而用library关键字生成的是.dll文件;2.假如DLL要输出供其它应用程序使用的函数或过程,则必须将这些函数或过程列在exports子句中。而这些函数或过

3、程本身必须用export编译指令进行编译。在Delphi主菜单file 中选new.项,在弹出的窗口中双击DLL图标,便会自动给出DLL源模块框架,Library project1;.注释.usesSysUtils, Classes;beginend.接下来便可在USES和begin之间加入想在该DLL中实现的过程和函数的定义,并用export和exprots保字把它们引出,以便别的模块引用,在begin和end之间加入初始化代码,初始化代码是用来对DLL变量初始化的。应注意,即便无初始化代码begin与end也不可省略,如下例:library minmax;function Min(X, Y

4、: Integer): Integer; export;if XY then Min := X else Min := Y;end;function Max(X, Y:if XY then Max := X else Max :exportsMin index 1,Max index 2;经编译后,并以存盘后,一个DLL库文件便形成了。三 DLL库的访问访问DLL库有两种方式,一种是静态引用,另一种是动态引用。用静态引用这种方法装入DLL要做两件事情:为DLL 库创建一个输入单元,以及用USES把输入单元连接到要使用DLL 函数的程序模块中。为DLL库创建的输入单元与普通的单元的区别仅在于:在

5、它的接口处声明的过程、函数,并不在它的实现部分给出真正的实现代码,而是用external关键字把过程、函数的实现细节委托给外部DLL模块。external命令的使用语法procedure /function 过程/函数名;external DLL模块名;下面给出为上面创建的库写的输入单元源文件testdll .pas,从中可看出输入单元 与一般 单元的一些差别,代码如下所示:unit testdll;interfacefunction Min (X, Y:function Max (X, Y:implementationfunction Min; external ;function Max;

6、一个应用程序若想调用中的函数,只须在其uses语句中加入testdll 单元即可。动态装入DLL,要用到Windows的三个API函数。Loadlibrary、Freelibrary和GetprocAddress 。loadlibrary函数用来装入DLL库,其调用格式function loadlobrary (DLLfileName:Pchar): THandle:当不再需要一个DLL库时,应调用FreeLibrary函数将其释放,以空出宝贵的内存资源,其调用格式procedure FreeLibrary (Libmodule:THandle)Libmodule 为由LoadLibrary调

7、用得到的DLL库句柄。在用loadlobrary 函数装入某个DLL库和调用FreeLibrary释放该DLL库之间的程序段中, 可以使用该DLL库中的过程和函数,具体使用方法是:用GetprocAddress函数把DLL库中函数的地址传递给程序中某个函数变量,再用该变量实现DLL函数的调用。GetprocAddress函数声名如下,function GetprocAddress (Libmodule:THandle:procname:pchar):TFarProc:如下例所示:typeTTimeRec = recordSecond:Minute:Hour:TGetTime = procedu

8、re(var Time: TTimeRec);THandle = Integer;varTime: TTimeRec;Handle: THandle;GetTime: TGetTime;Handle := LoadLibrary();if Handle0 thenGetTime := GetProcAddress(Handle, GetTime);if GetTimenil thenGetTime(Time);with Time doWriteLn(The time is , Hour, :, Minute, :, Second);FreeLibrary(Handle);在调用动态链接库时应注意, 所需动态链接库须与应用程序在同一目录或Windows System 目录下。动态链接库是 Windows下程序组织的一种重要方式,使用动态链接库可以极大地保护用户在不同开发工具、不同时期所做的工作,提高编程效率。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2