常规DLL使用:MFC共享与MFC静态链接

时间:2010-04-16 11:57:45

标签: visual-studio dll mfc visual-c++

当我们使用Visual Studio(VC8或9)创建DLL时,我们得到一个选项 创建常规DLL

 using MFC as shared DLL

 using MFC as static library

他们有什么不同?哪一个是可取的?

3 个答案:

答案 0 :(得分:12)

静态库意味着您在库中使用的代码包含在您的可执行文件中。因此,您无需运送库或要求最终用户将其置于其计算机上。但是,这会增加可执行文件的大小并将您绑定到该库版本,因此如果您只需要更新库,则必须发送新的可执行文件。

共享库在需要它(运行时)时执行代码来调用库,但它需要用户在其计算机上安装它(通常是特定的或最小版本)。如果需要,您还可以使用您的应用程序分发所需的库版本。

至于哪个更好,我不知道。我不是Windows C ++或MFC程序员,所以我不能说。在我的Linux服务器上,我编写的应用程序通常是服务器端,因此使用共享库。

这取决于您的应用程序的使用方式,分布式,更新,MFC库的更改频率,如果它通常可以在用户的​​PC上使用等。

答案 1 :(得分:4)

[我想我现在得到了答案]

如果您使用MFC DLL作为动态链接,您的代码将需要与您的应用程序一起安装的Microsoft基础库DLL(特别是您的代码所需的版本)或用户端的DLL。这意味着您的安装包将包含

  • 您的应用程序/ DLL和支持文件
  • 所有MFC Dlls

这使得安装包大小变得更大,并且还花费时间让用户下载您的安装设置。

如果您将MFC链接为静态库,即使用户端没有MFC DLL,您的代码也能正常工作。您在代码中引用的所有MFC库非常简单的原因将被链接到您的应用程序或DLL中。这意味着您的app / dll中使用的那些MFC库成为二进制文件的一部分;但是,你的app / dll会更大。

答案 2 :(得分:2)

另一个考虑是为您的申请提供服务。

如果您发布MSFT redis,动态链接其库,然后MSFT后来“修复”DLL中的一些重要缺陷,他们会通过Window的更新修补客户机器上的DLL。如果您静态链接,则需要直接更新所有客户。

当然,如果您担心修补的DLL可能会破坏您的应用程序(因为您依赖于未指定的行为),您可能希望直接与您的客户一起处理服务(和测试)。