当前位置: 首页 > news >正文

[MFC] VS2013版本MFC工程移植到VC6.0上

 

: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~ 

 

相关文章:

  • 关于APP,原生和H5开发技术的争论
  • CentOS7+Tomcat 生产系统部署
  • 只有明确目标和方向才能直冲云霄
  • 如何解决MathType特殊字符在InDesign中的这些问题
  • 【深入浅出Node.js系列二】Node.jsNPM的安装与配置
  • ElasticSearch关闭重启命令
  • linux命令总结之---cat命令
  • 使用 wondershaper 在 Linux 中限制网络带宽使用
  • Python 中使用 MongoDB 存储爬虫数据
  • Jquery的同步和异步请求
  • 优先级队列(大顶堆)
  • orm2 中文文档 3.1 模型属性
  • 点击复选框添加或删除value值到input输入框中
  • Android Property Animation属性动画:rotation旋转(2)
  • linux上很方便的上传下载文件工具rz和sz使用介绍
  • [译]Python中的类属性与实例属性的区别
  • 10个最佳ES6特性 ES7与ES8的特性
  • 2019.2.20 c++ 知识梳理
  • canvas 五子棋游戏
  • Cookie 在前端中的实践
  • CSS中外联样式表代表的含义
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • HTTP 简介
  • IDEA 插件开发入门教程
  • input的行数自动增减
  • js如何打印object对象
  • PHP CLI应用的调试原理
  • php面试题 汇集2
  • Twitter赢在开放,三年创造奇迹
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 新版博客前端前瞻
  • 责任链模式的两种实现
  • linux 淘宝开源监控工具tsar
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • (c语言)strcpy函数用法
  • (八)c52学习之旅-中断实验
  • (多级缓存)缓存同步
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (一)u-boot-nand.bin的下载
  • (转)Google的Objective-C编码规范
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET/C# 的字符串暂存池
  • .NET/C# 反射的的性能数据,以及高性能开发建议(反射获取 Attribute 和反射调用方法)
  • .NET正则基础之——正则委托
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @private @protected @public
  • @RequestBody与@ResponseBody的使用
  • @RestController注解的使用
  • @Validated和@Valid校验参数区别
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [CF494C]Helping People
  • [JavaScript]如何讓IE9, IE8, IE7, IE6關閉視窗時不彈出對話訊息