专栏首页施炯的IoT开发专栏EVC3/4项目升级到Visual Studio项目的一些建议

EVC3/4项目升级到Visual Studio项目的一些建议

    大家都在忙着研究WP7了,每天在园子里有好多精彩的文章出现。这几天受朋友的委托,帮忙把他手头的一个项目进行升级。情况大概是这样的:项目是用EVC 3来开发的,一开始运行在PocketPC 2002上(估计是很久以前的事情了),随着操作系统版本的更新,该程序已经不能运行在Windows  Mobile 6.5平台上了。其实,按照微软官方的说法,EVC 4已经不能开发Windows Mobile 6.0以上的应用程序了,取而代之的是使用Visual Studio 2005/2008。自己的电脑上已经安装了Visual Studio 2008,所以就用这个工具来升级项目吧。下面就记录一下我升级的过程,其中碰到的问题,以及解决的方法,希望能够给后来人留下点信息,少走点弯路。

1. 使用Visual Studio 2008自动升级项目

    点击EVC项目中的.vcp文件,Visual Studio 2008就会弹出对话框,然后进行升级,如下图所示:

    一路Next以后,升级完成,并给出升级报告,会有Errors或者是Warnings,

2. 处理error C2440: 'static_cast' : cannot convert from 'void (**)(WPARAM,LPARAM)' to 'LRESULT (** )(WPARAM,LPARAM)

    这个错误比较常见,处理方法也可以在其中找到提示,只要找到对应的afx_msg void (**)(WPARAM,LPARAM),改成:afx_msg LRESULT (** )(WPARAM,LPARAM)就可以了。注意的是要在头文件和.cpp文件中都进行修改,使得其一致。同时,在函数体中,进行return相应的值。因为需要返回LRESULT值。

3. 处理编译错误error C2065: 'i' : undeclared identifier

    原因:是由于存在以下的代码段: for (int i = 0; i < MAX_LEN; i ++) {    //…… } for (i = 0; i < MAX_NUM; i ++) {     //…… }     对于evc离开循环后,循环变量仍然有效,并且仍可以使用,但是在VS2005下是不行的,由此可见VS2005对变量的定义与审查更为严格,还有就是对数组越界问题也比EVC来的强。     解决方法:(不能完全相信编译器,也不能把所有的语法检查都丢给编译器) int i = 0; for (i = 0; i < MAX_LEN; i ++) {     //…… } for (i = 0; i < MAX_NUM; i ++) {      //…… }

4. 处理fatal error RC1015: cannot open include file 'wceres.rc'.

    这个错误可以进行如下处理:右击项目资源 (RC) 文件,选择“查看代码”,然后注释掉以下行: //#include "wceres.rc"

5. 处理Unable to Start Program ‘*****’

    编译通过,想下载调试的时候,出现这个问题。解决方法:在工程属性—〉General—〉Project Defaults –〉Use MFC 中,把Use MFC in a shared DLL 改为 Use MFC in a static DLL ,如下图所示:

6. 处理Unhandled Expection at ***:Access Violation reading location***

    这类错误只能仔细逐步调试,准确定位以后,才能解决。以我为例,这个异常出现在winmain.cpp中,

    原因是InitInstance()返回不成功,于是我再进入InitInstance函数查看。发现里面的domodal模式对话框居然返回失败。

    这让我感觉有点摸不着头脑了,不过收获就是定位到了建立模式对话框出错这里。继续查找资料,起初是怀疑类似dll加载是否有问题,但是项目里面并没有加载相应的dll。因此这个可能排除掉了。后来在msdn英文论坛上找到了一些蛛丝马迹,还是在项目的资源文件上出了问题,默认情况下,Embedded Visual C++ 4.0 版会将 MFC Pocket PC 应用程序的对话框样式设置为 DS_MODALFRAME,但是MFC 8.0 不支持此样式。解决方法,打开项目资源文件:**.rc,定位到对话框资源,对风格进行修改:

    目前为止,我暂时碰到的问题还只有以上这些。如果还有问题的话,我会继续总结。

    另外,MSDN文档和前辈的一些文章给了我很好的参考,在此给出链接,希望对大家有用。

1. eMbedded Visual C++ 到 Visual Studio 2005 升级向导

2. 从 MFC 3.0 升级到 8.0 后不受支持的 eVC 类的列表

3. 从 eVC 移植所带来的已知问题

4. 也谈EVC工程移植

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Windows 10 IoT Serials 8 – 如何改变UWP应用的目标平台

        Windows Insider计划直接加速了Windows系统的迭代,缩短了系统发布的周期。就Windows 10 IoT Core而言,迭代的速度和W...

    ShiJiong
  • Azure Sphere Development Environment Setup

    目前,Visual Studio 2017/2019支持Azure Sphere开发,后续,微软会加入Visual Studio Code的支持。以Vi...

    ShiJiong
  • Application Architecture Guide 2.0 - CH 19 - Mobile Applications(4)

    本文翻译"Porting"、"Power"、"Synchronization"、"User Interface"和"Performance Considerat...

    ShiJiong
  • 3_0_4 要理解并会用的几个脚本

    随便找几个文件进行练习,只是为了说明问题,这些其实是RNA-seq数据,但无所谓,只是看脚本的处理 有以下几个文件

    Y大宽
  • 猫狗大战一触即发,双11京东品质战略对掐阿里,更为消费升级

    今天距离11月11日还有三周,中国电商行业已充满火药味:在天猫于香港启德码头举行天猫双11全球狂欢节启动仪式之前,京东则与沃尔玛宣布了战略合作最新进展,沃尔玛将...

    罗超频道
  • SDN和数据中心蜜月后还能做点啥

    SDN的部署场景 现在软件定义网络(SDN)已经渡过了蜜月期,迈向了实际部署阶段,在实际部署中需要解决更多的问题,追踪其部署状况是很有必要的。SDN市场想要发展...

    SDNLAB
  • WSO2 ESB(4)

    WSO2的企业服务总线(ESB)的用户指南 用户指南介绍了如何配置WSO2 ESB使用基于Web的管理控制台。 WSO2的管理控制台已经过测试的Mozilla ...

    cloudskyme
  • 如何使用sklearn进行在线实时预测(构建真实世界中可用的模型)

    Python 作为当前机器学习中使用最多的一门编程语言,有很多对应的机器学习库,最常用的莫过于 scikit-learn 了。我们介绍下如何使用sklearn进...

    abs_zero
  • CentOS 6.x源码安装Netdata

    Netdata 介绍 Netdata是一个高度优化的Linux守护进程,它为Linux系统,应用程序,SNMP服务等提供实时的性能监测。 Github: h...

    shaonbean
  • BroadcastReceiver插件化解决方案

    1.静态广播和动态广播仅区别于注册方式的不同。静态广播的注册信息保存在PMS中,动态广播的注册信息保存在AMS中

    用户3112896

扫码关注云+社区

领取腾讯云代金券