哪个是 DLL 的隐式链接和显式链接之间的最佳实践

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

我看到有很多不同的理由来隐式和显式 link .DLL。我目前正在使用 Visual Studio 2015 和带有 SFML 的 C++。

隐式: -好的一面: 您有权访问 .DLL header(.h) 并知道它包含的功能。 link 和使用更容易。 不太容易出错。 似乎是最常用的做法。

-不好的一面: 绝对需要 .lib、.h 和 .dll 文件 link。 由于文件较多,占用更多磁盘space。

明确: -好的一面: 由于只需要 .dll,占用更少的磁盘 space。

-不好的一面: 由于可能使用 dll 可能没有的功能以及正确加载它,因此容易出错。 没有办法知道 dll 包含的功能,因为你没有 header.

1:我听说 link 显式是一种不好的做法。这是正确的吗?

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

3: 显然,我对 DLL 的了解很少,关于 link 一个 dll 的隐式和显式方法,是否有更多好的和坏的方面我没有看到?

4: 由于我打算制作游戏,所以将 sprite-sheet 放入 dll 中以使用指针加载一次纹理是一个好习惯吗?

你可以去掉你的“少拿盘space”点。 *.lib 仅在开发人员的机器上需要。在安装程序中,两种情况都只需要 DLL。

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

  2. 对于针对 儿童 大量没有经验的用户的游戏或其他桌面应用程序,我建议根本不要使用 DLL。 Link 所有代码都是静态的。它不仅使您的应用程序更小(链接器会丢弃您未调用的那些库中的任何代码),这还将消除 class 的错误。这当然也适用于 C 运行时库 (msvcrt.dll)。

_4。我不会那样做。从逻辑上讲,精灵 sheet 是数据,而不是代码。无论您如何加载 DLL,静态或动态,您都不应该将它放在 DLL 中。相反,从文件加载该数据。如果您只在加载游戏或关卡时需要该数据,请使用 ReadFile API。如果您在游戏进行时 sheet 不断读取该精灵 运行,则可以将该完整的数据文件映射到进程的地址 space,请参阅 CreateFileMapping 和 MapViewOfFile API (在内部,DLL 加载使用此方法)。请注意 32 位应用地址 space 稀缺。