关于VC6.0 和其他VS编译器

       最近想写一些MFC应用程序,在发布的时候遇到了几个问题,从中得到了一点体会,与大家分享一下。

       遇到的几方面问题的起因:

1.      自己用VS(刚换Win7)编译好的程序在其他人那里无法运行,提示缺少MFC库;

2.      上面的问题好解决,用静态MFC方式重新发布,却发现原本200K的程序变成了1M多。

3.      之前使用VC6.0(原来是WinXP)开发的程序从来没有出过1中的问题,故使用VC6.0以动态MFC库的方式对程序进行编译,在其他器机上正常运行,问题出在哪里?

 

在用VSVC6.0之后版本)编译器对MFC项目进行编译时,如果使用的是MFC动态链接的方式,可执行程序是无法在没有装有开发环境的机器上运行,弹出与“无法找到MFCXX.dll”相似的MFC库文件不存在的错误提示对话框;然而这样的问题在VC6.0编译后的可执行程序上不存在。

       经过对刚装完的Windows系统的windows/system32目录下的动态库进行分析后可以看到,系统中初始就包括mfc42.dll文件,这个文件就是vc6.0使用的MFC动态库(可参见MFC的版本更新,从中也可以看到mfc42.dll是从98之后就包含在系统中了)。

Windows XP SP2系统中的MFC库文件

 

Windows 7系统中的MFC库文件

       如果以静态的方式进行编译MFC应用程序的话,可执行程序(.exe)文件大小会是动态链接的好几倍!所以说,如果不想使发布的程序体积过大,并且程序没有使用到新版MFC中的功能的话(就像改键工具),最好使用VC6.0以动态DLL方式进行编译。

 

版本更新

  新产品版本 MFC版本

  Microsoft C/C++ 7.0 MFC 1.0

  Visual C++ 1.0 MFC 2.0

  Visual C++ 1.5 MFC 2.5

  Visual C++ 2.0 MFC 3.0

  Visual C++ 2.1 MFC 3.1

  Visual C++ 2.2 MFC 3.2

  Visual C++ 4.0 MFC 4.0 (mfc40.dll included with Windows 95)

  Visual C++ 4.1 MFC 4.1

  Visual C++ 4.2 MFC 4.2 (mfc42.dll included with the Windows 98 original release)

  eMbedded Visual C++ 3.0 MFC 4.2 (mfc42.dll)

  Visual C++ 5.0 MFC 4.21 (mfc42.dll)

  Visual C++ 6.0 MFC 6.0 (mfc42.dll)

  eMbedded Visual C++ 4.0 none

  Visual C++ .NET 2002 MFC 7.0 (mfc70.dll)

  Visual C++ .NET 2003 MFC 7.1 (mfc71.dll)

  Visual C++ 2005 MFC 8.0 (mfc80.dll)

  Visual C++ 2008 MFC 9.0.21022 (mfc90.dll)

Visual C++ 2008 with Feature Pack MFC 9.0.30411 (mfc90.dll)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值