在静态库中使用MFC

时间:2012-02-16 04:28:10

标签: visual-c++ mfc installation static-libraries installshield

我已经使用“在静态库中使用MFC”选项创建了我的MFC应用程序。

我正在使用Installshield为我的应用程序创建安装。我应该在installshield中添加什么依赖项文件或“合并模块”?

是否需要添加“Microsoft C ++运行时库”或“Microsoft Visual C ++ MFC”合并模块?

3 个答案:

答案 0 :(得分:7)

静态链接意味着在链接器阶段,foo.lib嵌入在myapp.exe中。不存在对foo.dll的依赖,也不需要重新分发。您还应该了解,虽然静态链接使您的部署更容易,但它实际上被视为安全性可用性,因为如果在foo.lib / foo.dll(在这种情况下为MFC)中找到漏洞,则Microsoft无法通过更新版本来修补您的应用程序在WinSXS缓存中。您可以在构建计算机上包含最新的redist,重建和重新部署。

我强烈建议使用基本快照创建一个虚拟机,该快照代表您要支持的最旧的操作系统,然后在那里测试您的安装程序。这将有助于识别缺失的依赖项,然后可以使用Dependency Walker,ILDasm / .NET Reflactor和ProcessMon等工具解决这些依赖项。

答案 1 :(得分:1)

至少如果记忆服务,不。如果在静态库中使用MFC,则还需要静态链接到标准库。除非你在其他DLL上添加了一些其他依赖项,否则你应该有一个独立的可执行文件。

如果您愿意,可以/可以查看dependency walker以确定。

答案 2 :(得分:0)

许多时候,我们面临的exe和dll大小问题比以前的版本还多。 这可以使用项目属性来解决

菜单“项目” -属性... 配置属性--->“使用MFC在静态库中使用MFC” 和

在“ C / C ++选项”->选项卡“代码生成”->为静态MFC选择“多线程/ MT”。

如果选择以上选项,则无需在PC上安装VC2008 Redistributable,而exe或dll的大小较小