我已经看到有很多不同的原因来隐式和显式链接.DLL。我目前正在将Visual Studio 2015和C ++与SFML一起使用。

隐式:
-好的一面:
   您可以访问.DLL标头(.h),并且知道其中包含的功能。
   链接和使用起来更容易。
   不太容易发生错误。
   似乎是最常用的做法。

-坏的一面:
   绝对需要.lib,.h和.dll文件进行链接。
   由于文件更多,占用更多磁盘空间。

显式:
-好的一面:
   由于仅需要.dll,因此占用较少的磁盘空间。

-坏的一面:
   由于使用dll可能没有的功能以及正确加载它的可能性,容易出错。
   由于您没有标题,因此无法知道dll包含的功能。

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

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

3:显然,我对DLL的知识很少,是否有更多关于好的和坏的一面,我看不到链接dll的隐式和显式方式?

4:既然我打算制作游戏,将精灵表放置到dll中以一次使用指针加载纹理是一种好习惯吗?

最佳答案

您可以删除“占用更少的磁盘空间”点。 * .lib仅在开发人员的计算机上是必需的。在安装程序中,在两种情况下都仅需要DLL。


这取决于用例。在某些情况下,显式链接(通常称为动态加载)是唯一的方法,例如,当这些DLL实现用户提供的插件时。
对于针对大量没有经验的用户的孩子的游戏或其他桌面应用程序,我建议完全不使用DLL。静态链接所有代码。这不仅使您的应用变得更小(链接器将丢弃您不调用的库中的任何代码),而且还消除了一些错误。这当然也适用于C运行时库(msvcrt.dll)。


_4。我不会那样做。从逻辑上讲,一张Sprite表是数据,而不是代码。无论您以静态还是动态方式加载DLL,都不应将其放置在DLL中。而是从文件加载该数据。如果仅在加载游戏或关卡时需要该数据,请使用ReadFile API。如果在游戏运行时不断从该Sprite表中读取内容,则可以将完整的数据文件映射到进程的地址空间,请参阅CreateFileMapping和MapViewOfFile API(内部,DLL加载使用此方法)。只是提防32位应用程序的地址空间不足。

09-04 02:47
查看更多