前言
最近在做一个MFC项目,使用了有名的BCG界面库,我的编程平台是 Win10 + VS2015
, 在我自己的机器上测试的时候一直都是使用动态链接的方式,没有什么问题,但是当切换到 Windows Server 2008 R2
系统下,会出现缺少 xxx.dll
的错误,按照往常的做法,缺少的文件也就是VC的运行库,然而我安装VS2015的运行库却失败了,网上一查才发现VS2015的运行时库不支持 Windows Server 2008 R2
,最低得是 Windows Server 2008 R2 with SP1
,安装运行库的法子走不通,只能换一条路了。
静态链接
MFC程序可以用动态链接或者静态链接的方式使用MFC的库,动态链接的好处是最后生成的exe文件非常小,缺点是目标机器必须安装对应的运行库,或者要在文件夹里手动放入所需的dll;静态链接的好处是直接把VC的运行库链接到最终的exe里,不必安装运行库或者添加一堆dll就可以直接运行,缺点是生成的exe会比较大。
静态链接多占用的那一点空间对我来说没什么影响,所以我打算采取静态链接的方法解决上面提到的问题,MFC的库好办,只需要改项目属性就可以了,而静态链接BCG库则多一点波折,关于如何静态链接BCG库网上也有很多方法,但是并不全面,经过一番查找,我自己总结了在MFC里静态链接BCG库的方法,内容主要参考自BCG技术问答里的这个问题
总结
准备
- 编译所需版本的静态库lib文件(这一步在安装BCG库的时候一般做过了,直接拷贝出来就行,如
BCGCBPRO2510STATICU140.lib
)
- 修改项目属性
C/C++
->代码生成
->运行库
里选择MT
(release)或者MTd
(debug)常规
里选择在静态库中使用 MFC
- 将BCGSoft\BCGControlBarPro\BCGCBPro\Styles下的
Office 2010 (blue)
文件夹(以该主题为例)BCGPStyle2010Blue.rc
和BCGPStyle2010Blue.rc2
文件
- 拷贝到
你的项目主目录
修改 stdafx.cpp
在 stdafx.cpp
文件的最后(在 #include stdafx.h
之后)添加以下代码
|
|
修改资源文件属性
在资源视图的对话框上点击右键,选择 资源包括(L)...
- 在
只读符号指令
里添加#include "bcgprores.h"
- 在
编译时指令
里- 移除
_AFX_NO_SPLITTER_RESOURCES
- 添加
#include "BCGCBPro.rc"
和#include "BCGPStyle2010Blue.rc"
- 如果你想动态链接MFC,静态链接BCG, 则添加
"#define _BCGCBPRO_STATIC_"
- 移除
- (这条基本不用管)如果你的项目是从MFC版本2008或更高版本移植的,请删除资源文件中对
afxribbon.rc
的所有引用,因为它和BCGCBPro.rc
冲突