当前位置: 首页 > 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使用介绍
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • js
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Travix是如何部署应用程序到Kubernetes上的
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于webpack 的 vue 多页架构
  • 设计模式 开闭原则
  • 使用权重正则化较少模型过拟合
  • 通信类
  • 为视图添加丝滑的水波纹
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 湖北分布式智能数据采集方法有哪些?
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ![CDATA[ ]] 是什么东东
  • #传输# #传输数据判断#
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (1)(1.13) SiK无线电高级配置(六)
  • (分布式缓存)Redis分片集群
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)计算机毕业设计大学生兼职系统
  • (简单) HDU 2612 Find a way,BFS。
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (学习日记)2024.01.09
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .Net 4.0并行库实用性演练
  • .NET 8.0 发布到 IIS
  • .NET 设计模式初探
  • .vimrc php,修改home目录下的.vimrc文件,vim配置php高亮显示
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ C++ ] STL---string类的模拟实现
  • [@Controller]4 详解@ModelAttribute
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下