WinCE平台的程序编译到Win32平台下运行
最近做的项目中,有一个在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的配置,改为
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="2"
- GenerateDebugInformation="true"
- SubSystem="2"
- TargetMachine="1"
- />
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的配置,改为
- <Tool
- Name="VCLinkerTool"
- LinkIncremental="1"
- GenerateDebugInformation="true"
- SubSystem="2"
- OptimizeReferences="2"
- EnableCOMDATFolding="2"
- TargetMachine="1"
- />
2. 修正平台差异带来的编译错误
2.1 stdafx.h
首先是WINVER的定义,WinCE下被定义为_WIN32_WCE,改之:
- #if defined(WINCE)
- #define WINVER _WIN32_WCE
- #else
- #define WINVER 0x0501 // 允许使用特定于 Windows XP 或更高版本的功能。
- #endif
然后是一些WinCE特有的头文件和库,改为仅当WINCE宏被定义时编译(可能分散在不同位置):
- #if defined(WINCE)
- #include <ceconfig.h>
- #include <altcecrt.h>
- #include <aygshell.h>
- #pragma comment(lib, "aygshell.lib")
- #endif
2.2 App类
在xxxApp::InitInstance中,SHInitExtraControls()的调用加上宏检测,仅当WINCE宏被定义时编译。
- #if defined(WINCE)
- // SHInitExtraControls should be called once during your application's initialization to initialize any
- // of the Windows Mobile specific controls such as CAPEDIT and SIPPREF.
- SHInitExtraControls();
- #endif
另外App类的头文件中包含了资源文件的定义,但被#ifdef POCKETPC2003_UI_MODEL宏包了起来,我的程序在两个平台都使用同样的资源,因此把这个宏注释掉即可。
参考链接:http://blog.sina.com.cn/s/blog_7ffab91701016o5o.html
WinCE平台的程序编译到Win32平台下运行的更多相关文章
- MySQL-Front 出现“程序注册时间到期 程序将被限制模式下运行”解决方式
MySQL-Front 出现“程序注册时间到期 程序将被限制模式下运行”解决方式 在用mysql-front的时候遇到显示:程序注册时间到期程序将被限制模式下运行.可以在“帮助”菜单下的点“登记”-- ...
- Java——用程序编译一个文件夹下所有java文件到另一个文件夹下
package com.java.test.a; import java.io.IOException; import java.util.ArrayList; import java.util.Ar ...
- C#让程序自动在管理员权限下运行
windows 7和vista提高的系统的安全性,同时需要明确指定“以管理员身份运行”才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛 ...
- .net程序在无.net环境下运行
看了篇文章 测试了下竟然真的可以运行 测试环境是XP下 没有装NET2.0的情况下 可以运行的 不过需要每次输入命令才能运行 点击后还是会报错 原文如下 众所周知,.net程序必须运行在.n ...
- C# 32位程序在64位系统下运行中解决重定向问题
在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与 ...
- C# 32位程序在64位系统下注册表操作
在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与 ...
- [转]C#程序无法在64位系统上运行之.NET编译的目标平台
今天将编译的C#的exe拷贝到测试机上(Win7_64bit),一运行就挂了,提示“stop working”,一开始怀疑测试机上没有安装.net framework框架,追究半天原来是编译的目标平台 ...
- Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)
参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Lin ...
- QT5.7.0在win10下使用visual studio 2015编译(目标平台 xp)
环境:win10+vs2015+QT5.7.0 目标:编译出能在windows xp上运行的QT 通过baidu和bing找出来的结果没有一个能成功运行,大部分都能编译成功,并完美解决“exe不是有效 ...
随机推荐
- C# Serializable
System.SerializableAttribute 串行化是指存储和获取磁盘文件.内存或其他地方中的对象.在串行化时,所有的实例数据都保存到存储介质上,在取消串行化时,对象会被还原,且不能与其原 ...
- Mongoose笔记
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 mongoose是针对mongoDB操作的一个对象模型库,封装了mongoDB对文档的.增删改查等方法 使用Ko ...
- SpringBoot系列: Actuator监控
Sprng Boot 2 actuator变动加大, 网上很多资料都都已经过期. ============================配置项============================ ...
- MyEclipse创建SWT程序
创建项目:NewProject->WindowsBuilder->SWT Designer->SWT/JFACE Java Project添加SWT窗口:New->Window ...
- Javaweb学习笔记——(十)——————response对象,response字符流缓冲器,响应头,状态码,重定向,requset对象,路径和乱码
请求响应对象: request和response *当服务器接收都请求后,服务器会创建request和response对象,把请求数据封装到request对象中: *然后调用Servlet的sevic ...
- luogu 1268 树的重量
打眼一看就是最小生成树嘛,但经过板子wa掉的经历后得知,,emmmm,原来是, 构造! (虽然不知是什么但觉得听起来很厉害的样子...手动微笑) n=2的情况 自然就是g(1,2) n=3的情况,由于 ...
- 【转】const int *p和int * const p的区别(常量指针与指向常量的指针)
[转]作者:xwdreamer 出处:http://www.cnblogs.com/xwdreamer 对于指针和常量,有以下三种形式都是正确的: const char * myPtr = &am ...
- (9)EvenOddJump
一.问题描述 一只青蛙从数组(A)的每一个元素向数组尾部跳动.跳动规则如下: 当奇数跳的时候,就是第1.3.5.7....次进行移动时候,移动规则A[i] <= A[j], 并且A[j] = ...
- 查看 Centos 7 的MAC 地址
查看 Centos 7 的 MAC 地址 ens*** 网卡名称# cat /sys/class/net/eno16777736/address 查看内核版本 uname -a 查看系统版本 ca ...
- Vue.component注意事项
Vue.component前不要加 new,否则报错: Uncaught TypeError: Cannot read property '_base' of undefined