静止的(static)和动态链接库加载(dynamic dynamic link library loading)的区别

DLL(动态链接库)充当可由许多应用程序和其他DLL调用的共享函数库。Delphi允许您创建和使用DLL,以便您可以随意调用这些函数。但是,必须先导入这些例程,然后才能调用它们。...

DLL(动态链接库)充当可由许多应用程序和其他DLL调用的共享函数库。Delphi允许您创建和使用DLL,以便您可以随意调用这些函数。但是,必须先导入这些例程,然后才能调用它们。

Woman working on a laptop computer

从DLL导出的函数可以通过两种方式导入,一种是声明外部过程或函数(静态),另一种是直接调用特定于DLL的API函数(动态)。

让我们考虑一个简单的DLL。下面是“circle.dll”的代码,导出一个名为“CircleArea”的函数,该函数使用给定半径计算圆的面积:

拥有circle.dll后,可以使用应用程序中导出的“CircleArea”函数。

静载荷

导入过程或函数的最简单方法是使用外部指令声明它:

如果在单元的接口部分包含此声明,则程序启动时将加载circle.dll一次。在整个程序执行过程中,使用上述声明所在单元的所有单元都可以使用CircleArea函数。

动载荷

您可以通过直接调用Win32 API(包括LoadLibrary、FreeLibrary和GetProcAddress)来访问库中的例程。这些函数在Windows.pas中声明。

以下是如何使用动态加载调用CircleArea函数:

使用动态加载进行导入时,直到调用LoadLibrary后才会加载DLL。通过调用FreeLibrary卸载库。

通过静态加载,DLL被加载,其初始化部分在调用应用程序的初始化部分执行之前执行。这与动态载荷相反。

您应该使用静态还是动态?

下面简单介绍静态和动态DLL加载的优缺点:

静载荷

赞成的意见:

  • 对于初学者来说更容易;没有“丑陋”的API调用。
  • DLL仅在程序启动时加载一次。

欺骗:

  • 如果任何DLL丢失或找不到,应用程序将不会启动。将出现类似这样的错误消息:“此应用程序无法启动,因为找不到'missing.dll'。重新安装应用程序可能会解决此问题。”。根据设计,带有静态链接的DLL搜索顺序包括加载应用程序的目录、系统目录、Windows目录以及PATH环境变量中列出的目录。还请注意,对于不同的Windows版本,搜索顺序可能不同。始终希望调用应用程序所在的目录中有所有DLL。
  • 即使不使用某些.function,也会加载所有DLL,因此会使用更多内存

动载荷

赞成的意见:

  • 即使程序使用的某些库不存在,也可以运行程序。
  • 由于DLL仅在需要时使用,因此内存消耗更小。
  • 您可以指定DLL的完整路径。
  • 可用于模块化应用。应用程序仅为用户公开(加载)“已批准”的模块(DLL)。
  • 动态加载和卸载库的能力是允许开发人员向程序添加额外功能的插件系统的基础。
  • 向后兼容较旧的Windows版本,在这些版本中,系统DLL可能不支持相同的功能或以相同的方式受支持。首先检测Windows版本,然后根据应用程序运行的内容动态链接,这使您能够支持更多版本的Windows,并为较旧的操作系统提供解决方案(或者至少优雅地禁用您无法支持的功能)

欺骗:

  • 需要更多的代码,这对于初学者来说并不总是容易的。

  • 发表于 2021-09-15 03:51
  • 阅读 ( 177 )
  • 分类:编程

你可能感兴趣的文章

静止的(static)和动态内存分配(dynamic memory allocation)的区别

...内存分配有效。一个缺点是实现动态内存分配很复杂。 静止的(static)和动态内存分配(dynamic memory allocation)的共同点 两者都是内存分配机制。 两者都应该由程序员手动实现。 静止的(static)和动态内存分配(dynamic memory allocation)的...

  • 发布于 2020-10-11 12:09
  • 阅读 ( 1009 )

静态绑定(static binding)和动态绑定(dynamic binding)的区别

...静态绑定与动态绑定的表格形式 6. 摘要 什么是静态绑定(static binding)? 绑定是方法调用和方法定义之间的链接。 图01:静态绑定和动态绑定 参考下面用Java编写的程序。 公共A级{ 公共无效方法1(){ System.out.println(“方法1”)...

  • 发布于 2020-10-19 17:49
  • 阅读 ( 415 )

静止的(static)和动态特性(dynamic characters)的区别

...更受读者的喜爱。这提供了对这两类字符的基本理解。 静止的(static)和动态特性(dynamic characters)的区别 •静态人物在整个小说中没有发生任何变化,从头到尾都保持不变。这些大多是故事中的小人物。 •另一方面,动态角色在...

  • 发布于 2020-10-24 16:55
  • 阅读 ( 784 )

静止的(static)和动态路由(dynamic routing)的区别

静态与动态路由 静态路由和动态路由的区别在于路由条目进入系统的方式。计算机网络中的路由是指在计算机网络中正确地转发数据包,使数据包最终到达正确的目的地的过程。路由主要有静态路由和动态路由两种类型。在...

  • 发布于 2020-10-29 09:42
  • 阅读 ( 438 )

动态(dynamic)和静态ip(static ip)的区别

动态IP是指每次连接到网络时都会发生变化的IP,而静态IP是指无论连接多少次或从网络断开多少次都保持不变的IP。您是否有静态或动态IP地址取决于所述网络的管理员。每次连接到网络时,动态IP都会发生变化;这是一种在连接...

  • 发布于 2021-06-22 11:51
  • 阅读 ( 387 )

静态恶意软件分析(static malware analysis)和动态恶意软件分析(dynamic malware analysis)的区别

...理解恶意软件分析的方法。   什么是静态恶意软件分析(static malware ****ysis)? 静态分析是在不实际运行代码的情况下分析恶意软件二进制文件的过程。静态分析通常通过确定二进制文件的签名来执行,该签名是二进制文件的唯一...

  • 发布于 2021-06-25 17:38
  • 阅读 ( 429 )

动态拉伸(dynamic stretching)和静态拉伸(static stretching)的区别

...群用于针对关键的表现区域。   什么是静态拉伸练习(static stretch exercises)? 静态拉伸练习是一种更慢、更受控制的运动形式。静态练习是用来保持一个姿势在一个伸展的立场,并适合后锻炼阶段。它们有助于冷却过程,因为...

  • 发布于 2021-06-26 00:09
  • 阅读 ( 570 )

静止的(static)和动态平衡(dynamic equilibrium)的区别

...然而,这种情况在机械意义上比化学意义上更有意义。 静止的(static)和动态平衡(dynamic equilibrium)的区别 定义 动态平衡是反应物转化为产物,产物以相等且恒定的速率转化为反应物的平衡。 静态平衡是当反应中的所有粒子都处于...

  • 发布于 2021-06-27 09:49
  • 阅读 ( 565 )

静止的(static)和动态网站(dynamic website)的区别

...站。电子商务网站和社交媒体网站是***站的两个例子。 静止的(static)和***站(dynamic website)的区别 定义 静态网站是一个网站,它的网页是用HTML编码的,每个网页的内容都是固定的,除非经过编辑和重新发布,否则不会改变。***站...

  • 发布于 2021-07-01 01:36
  • 阅读 ( 631 )

静止的(static)和动态ip(dynamic ip address)的区别

静态IP地址和动态IP地址的主要区别在于,静态IP地址是由网络管理员手动分配给设备的固定地址,而动态IP地址是由DHCP服务器自动分配给设备的地址。 计算机网络由各种设备组成,如台式机、笔记本电脑、服务器、路由器和交...

  • 发布于 2021-07-01 03:17
  • 阅读 ( 809 )
llwt1878
llwt1878

0 篇文章

相关推荐