最近做的项目中,有一个在WinCE平台上跑的程序,后来随着项目的发展,要求此程序在PC上也能跑。
感谢VS 2005提供的多平台支持,只需要几分钟就可以解决这个问题,方法很简单,下面是我处理的过程。

1.在配置管理中增加新平台

1.1 创建新平台

程序最初是基于Pocket PC 2003(ARMV4)平台创建的,我在此平台的配置基础上,创建新的Win32平台。
打开菜单Build->Configuration Manager,在Active Solution Platform下拉选择框中选择New,选择new platform为Win32,Copy settings from选择原有配置Pocket PC 2003(ARMV4),按OK为应用程序创建新的Win32运行平台。

1.2 修改Debug|Win32的配置

Win32平台的配置由PPC复制而来,有些参数需要进行更改。可以在项目属性中进行修改,但直接修改工程文件可能更为直观和简单,我是直接修改此文件。

1.2.1 修改工具VCMIDLTool中的预定义宏PreprocessorDefinitions,只保留"_DEBUG"
1.2.2 修改工具VCMIDLTool中的预定义宏PreprocessorDefinitions,改为"_DEBUG;WIN32;_WINDOWS"
1.2.3 修改工具VCResourceCompilerTool中的预定义宏PreprocessorDefinitions,只保留"_DEBUG"
1.2.4 修改工具VCLinkerTool的配置,改为

  1. <Tool
  2. Name="VCLinkerTool"
  3. LinkIncremental="2"
  4. GenerateDebugInformation="true"
  5. SubSystem="2"
  6. TargetMachine="1"
  7. />
1.3 修改Release|Win32的配置

1.3.1 修改工具VCMIDLTool中的预定义宏PreprocessorDefinitions,只保留"NDEBUG"
1.3.2 修改工具VCMIDLTool中的预定义宏PreprocessorDefinitions,改为"NDEBUG;WIN32;_WINDOWS"
1.3.3 修改工具VCResourceCompilerTool中的预定义宏PreprocessorDefinitions,只保留"NDEBUG"
1.3.4 修改工具VCLinkerTool的配置,改为

  1. <Tool
  2. Name="VCLinkerTool"
  3. LinkIncremental="1"
  4. GenerateDebugInformation="true"
  5. SubSystem="2"
  6. OptimizeReferences="2"
  7. EnableCOMDATFolding="2"
  8. TargetMachine="1"
  9. />

2. 修正平台差异带来的编译错误

2.1 stdafx.h

首先是WINVER的定义,WinCE下被定义为_WIN32_WCE,改之:

  1. #if defined(WINCE)
  2. #define WINVER _WIN32_WCE
  3. #else
  4. #define WINVER 0x0501 // 允许使用特定于 Windows XP 或更高版本的功能。
  5. #endif

然后是一些WinCE特有的头文件和库,改为仅当WINCE宏被定义时编译(可能分散在不同位置):

  1. #if defined(WINCE)
  2. #include <ceconfig.h>
  3. #include <altcecrt.h>
  4. #include <aygshell.h>
  5. #pragma comment(lib, "aygshell.lib")
  6. #endif
2.2 App类

在xxxApp::InitInstance中,SHInitExtraControls()的调用加上宏检测,仅当WINCE宏被定义时编译。

  1. #if defined(WINCE)
  2. // SHInitExtraControls should be called once during your application's initialization to initialize any
  3. // of the Windows Mobile specific controls such as CAPEDIT and SIPPREF.
  4. SHInitExtraControls();
  5. #endif

另外App类的头文件中包含了资源文件的定义,但被#ifdef POCKETPC2003_UI_MODEL宏包了起来,我的程序在两个平台都使用同样的资源,因此把这个宏注释掉即可。

参考链接:http://blog.sina.com.cn/s/blog_7ffab91701016o5o.html

http://wenku.baidu.com/link?url=hHgo7JTPVeDK3prTYofXxJeanbIjK8G6K57CoQaNvRDU2EVyErzu7OM3FoCzQo63Bg3ds3B28ij420k1PJIatH7OJOVJNiN6mosK6P3WXdK

WinCE平台的程序编译到Win32平台下运行的更多相关文章

  1. MySQL-Front 出现“程序注册时间到期 程序将被限制模式下运行”解决方式

    MySQL-Front 出现“程序注册时间到期 程序将被限制模式下运行”解决方式 在用mysql-front的时候遇到显示:程序注册时间到期程序将被限制模式下运行.可以在“帮助”菜单下的点“登记”-- ...

  2. Java——用程序编译一个文件夹下所有java文件到另一个文件夹下

    package com.java.test.a; import java.io.IOException; import java.util.ArrayList; import java.util.Ar ...

  3. C#让程序自动在管理员权限下运行

    windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛 ...

  4. .net程序在无.net环境下运行

    看了篇文章  测试了下竟然真的可以运行  测试环境是XP下  没有装NET2.0的情况下 可以运行的   不过需要每次输入命令才能运行 点击后还是会报错 原文如下 众所周知,.net程序必须运行在.n ...

  5. C# 32位程序在64位系统下运行中解决重定向问题

    在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与 ...

  6. C# 32位程序在64位系统下注册表操作

    在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与 ...

  7. [转]C#程序无法在64位系统上运行之.NET编译的目标平台

    今天将编译的C#的exe拷贝到测试机上(Win7_64bit),一运行就挂了,提示“stop working”,一开始怀疑测试机上没有安装.net framework框架,追究半天原来是编译的目标平台 ...

  8. Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)

    参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...

  9. QT5.7.0在win10下使用visual studio 2015编译(目标平台 xp)

    环境:win10+vs2015+QT5.7.0 目标:编译出能在windows xp上运行的QT 通过baidu和bing找出来的结果没有一个能成功运行,大部分都能编译成功,并完美解决“exe不是有效 ...

随机推荐

  1. Spring AutoWire

    AutoWire 有 ByType ,ByName两种主要使用方式 public class Boss { @Autowired private Car car; public Car getCar( ...

  2. 判断以及防止SQL注入

    SQL注入是目前黑客最常用的攻击手段,它的原理是利用数据库对特殊标识符的解析强行从页面向后台传入.改变SQL语句结构,达到扩展权限.创建高等级用户.强行修改用户资料等等操作. 那怎么判断是否被SQL注 ...

  3. blender 操作快捷键

    选择:a: 全选OR取消选择b: 矩形选择c: 画刷选择ctrl+左键:套索选择ctrl+alt+右键 : 环边选择ctrl+右键:ctrl+tab:切换 点,线,面 选择模式ctrl+- 选择/收缩 ...

  4. lua与C/C++交互概要

    转 http://blog.csdn.net/wildfireli/article/details/22307635 Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常 ...

  5. 原型理解:prototype

    这一系列的链接的原型对象就是原型链(prototype chain) 1.所有对象都有同一个原型对象,都可通过Object.prototype获得对象引用 2.new出来的构造函数对象原型就是构造函数 ...

  6. PHP7语法知识(一):语言基础

    一.数据类型 1.字符串: 2.整形: var_dump函数:返回变量的数据类型和值. 3.浮点型: 4.布尔型: 5.数组: 6.对象: 7.NULL值 二.运算符 1.算术运算符: 2.递增递减运 ...

  7. 第25月25日 urlsession

    1. private lazy var session: URLSession = { let configuration = URLSessionConfiguration.default conf ...

  8. MacOS安装kafka可视化工具Kafka Tool

    1 下载地址 http://www.kafkatool.com/download.html 2 下载dmg包,选择对应版本,我的kafka是2.1的版本,所以选择了Kafka Tool 2.0.4 3 ...

  9. linux 统计某目录文件的行数

    通过find 正则搜索文件 find . -regex '.*\.c\|.*\.h' 每个文件的行数 find . -regex '.*\.c\|.*\.h' | xargs wc -l 显示文件的总 ...

  10. maven的pom.xml文件的标签详解

    该博文引至:https://www.cnblogs.com/hafiz/p/5360195.html <project xmlns="http://maven.apache.org/P ...