:VS虽号称“宇宙最强IDE”,但是有时候安装包太大,动不动就几个G;而且安装好之后也会多出很多几乎很难用到的部分,这对于那些处女座的人如何忍受!本文不是吐槽,而是给出一种在应急场景下,不用安装新版本几个G的IDE,而是将高版本的工程移植到低版本的IDE中,并使其工作和调试的解决方法~
VS2013版本MFC工程移植到VC6.0上
1、场景再现
我最近搞了个ubuntu系统,并在virtualbox中装了个win7用于安装设计PCB和嵌入式集成开发环境Keil。项目需要,得用到我之前写的一个将图片通过串口烧写到硬件flash的小应用程序,但是我之前备份的工程中并没有.exe程序,因此需要重新编译!可是由于事发突然,下载一个VS2013的安装包并安装显然“黄瓜菜都凉了”~于是我就大胆试了一下将高版本的程序转换到低版本上。
2、工程分析
下图是高版本IDE环境下的MFC工程文件结构。其中com.c和com.h是串口相关的文件,这两个文件属于MFC框架外添加的自定义文件(类),对于该类文件,可以直接在目标工程中添加即可;resource.h和*.rc文件是和资源相关的(比如:窗口、按钮、进度条等),其中resource.h包含各种控件(按钮、窗口、进度条等)的ID,知道MFC的人都知道逻辑部分是通过这些ID来调用资源的。这类资源移植要慎重,后面会重点说部分易错点;最后是XXXXDlg.cpp或XXXXDlg.h部分,这是主要逻辑部分,包括.h中的变量和成员函数声明,.cpp中的on_XXX消息响应函数和自定义成员函数,这类移植也要慎重。
3、移植过程
先下载一个我的绿色牛逼私藏的VC6.0企业版:http://pan.baidu.com/s/1mgIAGi8
之后新建一个同名MFC对话框工程,注意类名和dlg名也要一样!
接着直接把com相关文件加入工程;resource.h中间ID的宏定义可以直接替换*.rc文件可以对比着替换;Dlg.h也是对比着替换,比较容易看出来该增加哪些;Dlg.cpp中自己添加的成员函数可以直接copy进去,对于MFC自动生成的部分,要对比着替换(也比较容易观察),特别的在Dlg.cpp中的MESSAGE_MAP要注意并不是直接copy的,要通过类向导来添加!
查看->建立类向导->以BUTTON1为例:对照原来DLg.cpp文件中MAP中ON_BN_CLICKED(....)的设置为目标工程的控件绑定消息。当一个消息绑定好之后,IDE会自动增加一个上面灰色的一行,并在同一文件的下面某个地方生成该msg的响应函数OnBuClickedButton1LinkCom,这时你需要把原工程中响应的代码段放到对应响应函数中。
最后,再简单地排一下错,基本上像上面小的MFC工程移植一下和我写这篇博客花费的事件差不多。远远小于你下载个高版本的VS然后再安装运行来得快,谢谢~
@beautifulzzzz 2015-12-30 continue~