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的配置,改为

  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

时间: 2024-08-28 21:33:48

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

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

MySQL-Front 出现“程序注册时间到期 程序将被限制模式下运行”解决方式 在用mysql-front的时候遇到显示:程序注册时间到期程序将被限制模式下运行.可以在“帮助”菜单下的点“登记”-->把以下的key复制试试,留下以后需要.注意:是整十行一起复制.     gNBpPFgyOw9Rwt/ozsnjgM7tJNo2bhaaAThangemMkaz2tQhq3/f7dZ7Vj29WeGHjuupj/AhYqymjAuokhYiX1T/fG+q1yR22PdcEP39dxU3ovEol

32位程序在64位电脑下运行,

操作的注册表写入和读取会被定位到HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下 但部份系统注册信息在HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node下是没有的,所以就会导致32位程序在64位程序下执行出现异常.如HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography下MachineGuid在那个节点下是没有的 为了这个问题让我花了不少冤枉时间.在此记一下 32位程序在64位电脑下运行,

关于32位程序在64位系统下运行中需要注意的重定向问题(有图,很清楚)

0x00 前言 最近学习了[email protected]的文章<Persistence Architecture Matters>,恰巧解决了我之前遇到过的一个问题,理清了文件和注册表重定向中需要注意的细节 大家在学习的过程中难免也会碰到,所以在此分享一下. <Persistence Architecture Matters>的链接:https://labs.mwrinfosecurity.com/blog/persistence-architecture-matters/ 0

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

看了篇文章  测试了下竟然真的可以运行  测试环境是XP下  没有装NET2.0的情况下 可以运行的   不过需要每次输入命令才能运行 点击后还是会报错 原文如下 众所周知,.net程序必须运行在.net framework环境下,这在很大程度上限制了.net程序的普及,那么今天我给大家讲一个变向的解决方法. 也许很多人知道飞信是用.net开发的,但你们有没有想过为什么飞信能在没有安装.net环境下的PC中运行良好呢?我们能不能利用它的这个特性呢? 大家可以在飞信的安装目录中看到VMDotNet

linux中codeblocks程序编译运行后不出现控制台窗口

系统: CentOS 6.4 CodeBlocks 13.12 64bit 现象: 在codeblocks中新建了一个控制台程序,是最简单的“Hello,world”,但是程序编译后,点击运行按钮时不出现控制台窗口,但是在linux终端下,跳转到程序目录,就可以执行编译的程序. 错误:process terminated with status 255 解决: yum install xterm

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

在64位的Windows操作系统中,为了兼容32位程序的运行,64位的Windows操作系统采用重定向机制.目的是为了能让32位程序在64位的操作系统不仅能操作关键文件文夹和关键的注册表并且又要避免与64位程序冲突 相关资料请查看32位程序在64位系统下运行的重定向机制 下面是以获取操作系统安装密匙KEY的案例: using System; using System.Collections.Generic; using System.Linq; using System.Text; using

cocos2d-x v3.0的window平台搭建和编译成andriod程序

首先添加这个地址到系统环境变量,path 然后打开CMD,输入如下语句 现在就可以创建一个新项目了 这样一个空的cocos2d-x v3.0的项目就创建好了 接下来编译andriod程序 先在系统环境变量中添加一个NDK_ROOT 然后打开cmd 然后就开始编译了 接下来打开ADT中的eclipse 再添加andriod文件夹到工程里 cocos2d-x v3.0的window平台搭建和编译成andriod程序,布布扣,bubuko.com

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

参考链接: MXE.>大多数程序都是在windows平台下开发的程序.windows 在现实中也是绕不过的一个系统平台,做为受过几年VC,MFC”虐待”的程序员,在做为一个程序员之前是一位Linux重度使用者,受够了MFC之后一直想要找一个框架替换,使用过GTK,wxWidgets,Qt,最后还是Qt用得多一些.我认为程序跨平台应该是一个基本标准,同一份代码不需改动,或者改动极少,放在不同的平台下编译就能使用.不同平台,同样的界面,同样的操作,同样的体验.这里要讲的是我如何在Linux 下开发跨

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

环境:win10+vs2015+QT5.7.0 目标:编译出能在windows xp上运行的QT 通过baidu和bing找不出来的结果没有一个能成功运行,大部分都能编译成功,并完美解决“exe不是有效的win32程序”,但是程序依旧没法正常显示窗口. 此时会有一个crash,具体位置是qwindows.dll,但是使用depends查看也没看出来qwindows.dll有问题,有些人会遇到qwindows.dll依赖的 kernel32.dll在xp下没有对应接口,具体接口不记得了,最后看到是