Delphi中动态链接库两种调用方式的比较

Delphi中动态链接库两种调用方式的比较,第1张

Delphi中动态链接库两种调用方式的比较,第2张

一、动态链接库的概念
动态链接库(DLL)是一个可以被其他应用程序共享的程序模块,它封装了一些可以共享的例程和资源。dll文件的扩展名一般是DLL,或者drv,sys,fon。它与可执行文件(exe)非常相似,但不同的是,DLL虽然包含可执行代码,但不能单独执行,而是要由Windows应用程序直接或间接调用。

动态链接是相对于静态链接的。静态链接是指将要调用的函数或过程链接到可执行文件中,成为可执行文件的一部分。也就是说,函数和程序的代码都在程序的exe文件里,里面包含了运行所需的全部代码。当多个程序调用同一个函数时,内存中会有这个函数的多个副本,从而浪费了宝贵的内存资源。但是,动态链接调用的函数代码并没有复制到应用程序的可执行文件中,只是在其中添加了被调用函数的描述信息(往往是一些重定位信息)。只有当应用程序被加载到内存中并开始运行时,在Windows的管理下,应用程序和相应的DLL之间的链接关系才建立起来。当要执行被调用的DLL中的函数时,根据链接生成的重定位信息,Windows会依次执行DLL中相应的函数代码。

一般情况下,如果应用程序使用动态链接库,Win32系统保证内存中只有一个DLL副本,这是通过内存映射文件来实现的。该DLL首先被调用到Win32系统的全局堆栈中,然后映射到调用该DLL的进程的地址空。在Win32系统中,每个进程都有自己的32位线性地址空。如果一个DLL被多个进程调用,每个进程都会收到一个DLL的映像。与16位Windows不同,DLL可以看作是Win32中各个进程的代码。

二,动态链接库的优势

1.共享代码、资源和数据

使用DLL的主要目的是共享代码,DLL的代码可以被所有的Windows应用程序共享。

2.隐藏实现的细节

应用程序可以访问DLL中的例程,但是应用程序不知道这些例程的细节。

3.扩展Delphi等开发工具的功能。

因为DLL是独立于语言的,所以你可以创建一个DLL,并通过C++、VB或任何支持动态链接库的语言来调用它。如果这种语言有缺陷,可以通过访问另一种语言创建的DLL来弥补。

三、动态链接库的实现方法

1.加载时动态链接

这种用法的前提是你在编译前已经清楚地知道要调用DLL中的哪些函数,编译时只在目标文件中保留必要的链接信息,没有DLL函数的代码;程序执行时,DLL函数代码加载链接信息,链接到内存中调用程序的执行空间。它的主要目的是促进代码共享。

2.运行时动态链接

这样我们在编译之前不知道会调用哪些DLL函数,而是在运行过程中根据需要决定调用哪个函数,用LoadLibrary和GetProcAddress动态获取DLL函数的入口地址。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » Delphi中动态链接库两种调用方式的比较

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情