【问题标题】:Regular DLL using: MFC Shared vs MFC statically linked常规 DLL 使用:MFC 共享与 MFC 静态链接
【发布时间】:2011-02-08 19:24:31
【问题描述】:

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

 using MFC as shared DLL

 using MFC as static library

它们有何不同?建议使用哪一种?

【问题讨论】:

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


    【解决方案1】:

    另一个考虑因素是为您的应用程序提供服务。

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      这会使安装包变大,也使用户需要时间来下载您的安装设置。

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

      【讨论】:

      【解决方案3】:

      静态库意味着您从库中使用的代码包含在您的可执行文件中。因此,您不需要运送库或要求最终用户在他们的机器上安装它。但是,这会增加可执行文件的大小并将您绑定到该库版本,因此如果您只需要更新库,则必须发布一个新的可执行文件。

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

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

      这取决于您的应用程序的使用、分发、更新方式、MFC 库更改的频率、用户 PC 上是否普遍可用等。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-14
        • 1970-01-01
        • 2012-05-14
        • 2023-03-09
        • 1970-01-01
        相关资源
        最近更新 更多