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

AKN*_*AKN 5 dll mfc visual-studio visual-c++

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

 using MFC as shared DLL
Run Code Online (Sandbox Code Playgroud)

要么

 using MFC as static library
Run Code Online (Sandbox Code Playgroud)

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

And*_*lam 12

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

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

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

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


AKN*_*AKN 5

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

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

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

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

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