我已经看到有很多不同的原因来隐式和显式链接.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位应用程序的地址空间不足。