探讨delphi 中动态链接库(dll)的建立和使用

探讨delphi 中动态链接库(dll)的建立和使用

ID:21618142

大小:69.50 KB

页数:12页

时间:2018-10-23

探讨delphi 中动态链接库(dll)的建立和使用_第1页
探讨delphi 中动态链接库(dll)的建立和使用_第2页
探讨delphi 中动态链接库(dll)的建立和使用_第3页
探讨delphi 中动态链接库(dll)的建立和使用_第4页
探讨delphi 中动态链接库(dll)的建立和使用_第5页
资源描述:

《探讨delphi 中动态链接库(dll)的建立和使用》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、探讨Delphi中动态链接库(DLL)的建立和使用: 动态链接库是一个能够被应用程序和其它的DLL调用的过程和函数的集合体,它里面包含的是公共代码或资源。由于DLL代码使用了内存共享技术,在某些地方  工程标题;   uses子句;   程序体  而DLLs工程文件的格式为:  library工程标题;   uses子句;   exprots子句;   程序体  它们主要的区别有两点:  1.一般工程文件的头标用program关键字,而DLL工程文件头标用library关键字。不同的关键字通知编译器天生不同的可执行文件。用progr

2、am关键字天生的是.exe文件,而用library关键字天生的是.dll文件;  2.假如DLL要输出供其它应用程序使用的函数或过程,则必须将这些函数或过程列在exports子句中。而这些函数或过程本身必须用export编译指令进行编译。在Delphi主菜单file中选new...项,在弹出的窗口中双击DLL图标,便会自动给出DLL源模块框架,如下:Libraryproject1;{...:libraryminmax;functionMin(X,Y:Integer):Integer;export;beginifX%26lt;Ythe

3、nMin:=XelseMin:=Y;end;functionMax(X,Y:Integer):Integer;export;beginifX%26gt;YthenMax:=XelseMax:=Y;end;exportsMinindex1,Maxindex2;beginend. 经编译后,并以minmax.DLL存盘后,一个DLL库文件便形成了。三DLL库的访问访问DLL库有两种方式,一种是静态引用,另一种是动态引用。用静态引用这种方法装进DLL要做两件事情:为DLL库创建一个输进单元,以及用USES把输进单元连接到要使用DLL函数的

4、程序模块中。为DLL库创建的输进单元和普通的单元的区别仅在于:在它的接口处声明的过程、函数,并不在它的实现部分给出真正的实现代码,而是用external关键字把过程、函数的实现细节委托给外部DLL模块。external命令的使用语法如下:procedure/function过程/函数名;externalDLL模块名;下面给出为上面创建的minmax.DLL库写的输进单元源文件testdll.pas,从中可看出输进单元和一般单元的一些差别,代码如下所示:unittestdll;inte***ceusesfunctionMin(X,Y:

5、Integer):Integer;functionMax(X,Y:Integer):Integer; implementation functionMin;external‘minmax.DLL’;functionMax;external‘minmax.DLL’;end. 一个应用程序若想调用minmax.DLL中的函数,只须在其uses语句中加进testdll单元即可。 动态装进DLL,要用到Windows的三个API函数。Loadlibrary、Freelibrary和GetprocAddress。loadlibrary函数用来

6、装进DLL库,其调用格式如下:functionloadlobrary(DLLfileName:Pchar):THandle:当不再需要一个DLL库时,应调用FreeLibrary函数将其开释,以空出宝贵的内存资源,其调用格式如下:procedureFreeLibrary(Libmodule:THandle)Libmodule为由LoadLibrary调用得到的DLL库句柄。在用loadlobrary函数装进某个DLL库和调用FreeLibrary开释该DLL库之间的程序段中,可以使用该DLL库中的过程和函数,具体使用方法是:用Get

7、procAddress函数把DLL库中函数的地址传递给程序中某个函数变量,再用该变量实现DLL函数的调用。GetprocAddress函数申明如下,functionGetprocAddress(Libmodule:THandle:proame:pchar):TFarProc: 如下例所示:typeTTimeRec=recordSecond:Integer;Minute:Integer;Hour:Integer;end;TGetTime=procedure(varTime:TTimeRec);THandle=Integer;varTi

8、me:TTimeRec;Handle:THandle;GetTime:TGetTime;...beginHandle:=LoadLibrary('DATETIME.DLL');ifHandle%26lt;%26gt;0thenbegi

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。