这是DLL的隐式链接和显式链接的最佳实践

Which is the best practice between implicit linking and explicit linking of DLL

本文关键字:链接 最佳 DLL 这是      更新时间:2023-10-16

我看到过隐式和显式链接. dll有许多不同的原因。我目前正在使用Visual Studio 2015和c++与SFML。

隐式:好的一面:您可以访问. dll头文件(.h)并知道它包含的函数。它更容易链接和使用。更不容易出错。似乎是最常用的做法。

:太差了绝对需要.lib, .h和.dll文件链接。

文件较多,占用较多磁盘空间。

明确:好的一面:占用更少的磁盘空间,因为只需要。dll。

:太差了由于可能使用dll可能没有的函数以及正确加载它而容易出错。没有办法知道dll包含的函数,因为你没有头文件。

1:我听说明确链接是一种不好的做法。这是正确的吗?

2:我应该主要关注隐式链接吗?

3:显然,我对DLL的了解是最少的,关于链接DLL的隐式和显式方式,我没有看到更多的好和坏的方面吗?

4:既然我计划制作游戏,那么将精灵表放入dll中并使用指针加载纹理是否是个好做法?

您可以删除您的"占用更少的磁盘空间"点。*。Lib只需要在开发人员的机器上。在安装程序中,在这两种情况下只需要DLL。

  1. 这取决于用例。在某些情况下,显式链接(通常称为动态加载)是唯一的方法,例如当这些dll实现用户提供的插件时。

  2. 对于面向儿童大量无经验用户的游戏或其他桌面应用,我建议根本不要使用dll。静态地链接所有代码。它不仅使你的应用程序更小(链接器会从那些你没有调用的库中抛出任何代码),这也会消除一类bug。这当然也适用于C运行库(msvcrt.dll)。

_4。我不会那么做的。从逻辑上讲,精灵表是数据,而不是代码。无论如何加载DLL(静态或动态),都不应该将它放在DLL中。相反,从文件加载该数据。如果你只是在加载游戏或关卡时才需要这些数据,那就使用ReadFile API。如果你在游戏运行时不断读取精灵表,你可以将完整的数据文件映射到进程的地址空间,参见CreateFileMapping和MapViewOfFile API(在内部,DLL加载使用这个方法)。请注意,32位应用程序的地址空间是有限的。