大话WinCE与WinXP应用程序开发的差异性

//=====================================================================
//TITLE:
//    大话WinCE与WinXP应用程序开发的差异性
//AUTHOR:
//    norains
//DATE:
//    Wednesday 21-April-2010
//Environment:
//    Windows CE 5.0
//    Windows XP
//=====================================================================

 

     "龙生龙,凤生凤,老鼠生的儿子会打洞",所以无论是WinCE,还是WinXP,都是微软一个妈生的,自然有其相似的特点;但又由于"龙生九子,各有不同",故这两者的区别肯定还是存在的。

 

    因此今天我就来一回大话,大谈阔论,不严谨,不科学,随意而发。

 

    首先,来大话一下开发工具。

 

    对于近年才接触WinCE开发的朋友来说,见到EVB这个字眼可能会觉得非常陌生。想当年WinCE 3.0的时代,EVB可是和EVC是WinCE开发的两把利器。只不过后来估计微软看着EVB不顺眼,在4.0开始,就将EVB横扫出门,只剩下EVC一枝独秀。只不过EVC王者独尊的态势注定不可能太久,从5.0开始,VS就已经开始支持其开发。后辈VS支持STL开发的完善程度,编译器的效率等等,都是EVC所无法企及的。随着时间的推移,EVC注定也只能退出历史的舞台。只不过,EVC4.0很可能和接下来要说的VC6.0成为一个永恒的经典。

 

    转移到桌面Windows的开发,大家最熟悉不过的就是vc6.0。这款软件,堪称是经典,无论是执行速度,还是编译速度,在当年都是无望而不可及的高峰。即使是现在,很多人对此还津津乐道,特别是很多高校,教导C++采用的还是VC6.0,可见其影响力。只不过,技术是不停地发展的,微软注定不会让VC6.0舒服,后续又逐渐推出VS系列。

 

    我一直认为,VS2005是微软开发工具的一个里程碑,它结束了之前微软旗下编程工具的混乱局面,全部统一到vs这个大家族里面:

 

  用EVC开发WinCE应用程序?NO,NO,请使用vs2005!
  
  用PB编译WinCE系统?NO,NO,请使用vs2005!
  
  用VC开发WinXP程序?NO,NO,请使用vs2005!
  
  你所能想到的开发方式,vs2005都可以帮你解决。更为有意思的是,在此之前,同一套代码,分别适用于WinCE和WinXP,那么你就必须为这两个系统建立不同的工程:一个是给EVC用的,另一个是给VC。但如果你使用VS2005之后,那么一切都不同了。虽然一开始会强制让你选择开发的平台,但实际上生成工程之后,你可以手动添加不同的SDK。换句话来说,你只要简单地在vs2005上选择不同的SDK,就可以编译不同平台的程序。相对以前,这无疑是一个巨大的进步。
  
  扯谈完开发工具,我们再来看看调试的方式。在WinXP里,调试的环境和开发的环境是共用的。这个比较好理解,不就是本机编译的程序会直接在本机上运行嘛。只不过有一些危险的操作,估计没几个人会调试,比如说软件上有全盘格式化功能,我想没几个人会在本机上调试吧?WinCE就安全点,反正直接在WinXP上点击WinCE程序会给你弹出一个错误的运行框。所以,要调试WinCE程序,你只有两种途径,一个是使用模拟器,另一个就是通过ActiveSync连接到开发板。而这两种方式,最好的自然是后者,毕竟模拟器,顾名思义,就是"模拟",很多实际上会发生的问题很可能会被屏蔽。只不过,如果是开发消费类电子,在还没有板子回来前,模拟器确实是唯一的选择。
  
  具体到API函数代码方面,也确实有意思。WinXP有的函数,WinCE不一定具备;同样,WinCE随处可见的,也不一定在WinXP上有其身影;即使是两者都有的,其参数也不一定相同。
  
  不信?你在WinCE下给我找找SystemTimeToTzSpecificLocalTime,然后在WinXP下也搜搜SetEventData,最后比较一下ReadFile最后一个形参试试?如果你不需要代码横跨两个平台,那么这些都不是问题;如果你需要互相移植,那么前面的两个问题也不是什么大问题,大不了自己重新写一个同名函数即可。最郁闷的是最后一个,两个系统都有相应的函数,只是形参不同。像ReadFile这样算是好的,最后一个形参WinCE明令指出必须设置为NULL,你将该代码原封不动移植到WinXP下,也能正常工作。但有的函数就没有那么好的运气了,比如说CreateProcess的倒数第二个形参psiStartInfo,在WinCE下必须设置NULL,但如果你还是不加更改照搬到WinXP,那么迎接你的将是程序的崩溃--因为在WinXP下,该形参不能为NULL!
  
  不仅API函数需要留意,其实消息处理机制也必须注意。因为WinCE是一个精简的系统,实时性要求高,所以在WinCE下面消息处理机制有点点和WinXP不同。很可能在WinXP下跑得很正常的代码,在WinCE下会哑火;同样的道理,能在WinCE完美表现的代码,也许在WinXP下是一团糟。如果遇到这种情况,不妨从消息处理函数入手,说不定能有意外的惊喜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436371.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WinCE驱动的动态卸载

// //TITLE: // WinCE驱动的动态卸载 //AUTHOR: // norains //DATE: // Wednesday 21-April-2010 //Environment: // Windows CE 5.0 // 在之前的一篇《WinCE驱动的动态加载》(http://blog.csdn.net/norains/archive/2010/02/22/5316923.aspx)中有谈到,…

【转】09.认识一下Qt用到的开发工具

Qt 不是凭空产生的,它是基于现有工具链打造而成的,它所使用的编译器、链接器、调试器等都不是自己的,Qt 官方只是开发了上层工具。下面我们分几个部分讲解 Qt 使用到的工具链。 GNU 工具集 在上个世纪八十年代,计算机都是奢侈品…

冒个泡

好久没有上来了。也没有什么好说的。最近在做基于SVG开发的一个实时监测系统,感觉目前SVG性能还不是太好,客户端CPU不经意间就达到80%以上了。向老板提出辞职,不过老板没有同意,最终协商结果再做三个月,直到新人完全接…

发一个自己写的2440驱动1602的资料(电路+代码)

上个星期把MINI2440板上的富余数据线引了出来,看着以前丢下的1602突然有了想用ARM9驱动它的冲动,于是就开始干了。 代码是从以前刚学C51的时候改的,呵呵,看见以前写的代码真觉得很烂,现在已经整理好了。 虽说有点牛刀…

【转】10.Qt编程涉及的术语和名词

本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字,它们不一定专属于 Qt,在其它的 C/C 开发过程中也会使用到。 Project Project 的中文翻译是“项目”或者“工程”,这里的项目是指为实现某个相对独立功能的程序代码合集,这…

VS2005开发WinCE6.0应用程序 更换SDK后工程的移植

在应用VS2005开发嵌入式应用程序的时候,一旦平台的SDK发生改变,原先的应用程序就打不开了。搞的偶是非常郁闷,一旦添加了或者更改了驱动程序,重新导出平台SDK以后都要重新建工程,再把代码拷贝到新的工程中,…

【转】17.Qt界面布局管理详解

在上一节,通过一个简单的应用程序,分析了 Qt 创建的 GUI 应用程序中各个文件的作用,剖析了可视化设计的UI文件是如何被转换为 C 的类定义,并自动创建界面的。这些是使用 Qt Creator 可视化设计用户界面,并使各个部分融…

SQL Server 清空或删除所有数据库表中的数据

方法一&#xff1a; --生成数据库脚本的方法最快,处理的也最好 sql2000企业管理器 --右键要清理的数据库 --所有任务 --生成SQL脚本 --<常规>里选择"生成全部对象脚本"","在脚本文件中包含说明性标题&quo…

linux mysql移植_linux 下mysql 移植设置方法

环境:db01:10.10.10.101db03:10.10.10.103需求:将db01上mysql做完整移植,迁移到db03详细步骤:1. 打包db01上/app目录并scp到db03上:#tar -cvzf mysql.tar.gz /app/;scp mysql.tar.gz 10.10.10.103:/root/2. copy db01上/etc/ld.so.conf.d/mysql.conf到db03相应目录下,即/etc/ld…

【转】18.Qt信号与槽机制详解

信号&#xff1a;事件 槽&#xff1a;事件处理函数 信号与槽&#xff08;Signal & Slot&#xff09;是 Qt 编程的基础&#xff0c;也是 Qt 的一大创新。因为有了信号与槽的编程机制&#xff0c;在 Qt 中处理界面各个组件的交互操作时变得更加直观和简单。 信号&#xff0…

可以买的一本书:3D计算机图形学(原书第3版)

作  者&#xff08;英&#xff09;沃特&#xff08;Watt,A.) ,包宏 译出 版 社机械工业出版社图书定价&#xffe5;69.00 第1章 计算机图形学的数学基础 11.1 处理三维结构 11.1.1 计算机图形学中的三维仿射变换 11.1.2 改变坐标系的变换 61.2 结构变形变换 71.3 向量和计算机…

网站中毒

刚做了一个网站2008-应届生-校园招聘信息博客 购买了虚拟空间&#xff0c;可是发布没几天就发现中毒了打开网站首页&#xff0c;查看源文件&#xff0c;发现页面头部被加了一段代码 下载有关的文件并没有这行代码&#xff1f;不知道为什么&#xff1f;这段代码到底加到哪里了呢…

程序员找工作那点事儿

从7月中旬回武汉之后开始系统的复习&#xff0c;到9月下旬正式开始找工作&#xff0c;最后到10月中旬结束&#xff0c;前后历时三个月&#xff0c;从前期的职业定位&#xff0c;到中期的复习准备&#xff0c;最后到后期真枪实弹的笔试面试&#xff0c;个人感觉找工作就是个系统…

【转】QT介绍

一、Qt介绍 Qt&#xff0c;坦白来说&#xff0c;并不只是一个界面库&#xff0c;他是C编程思想的集大成者。它是一个经过完善的C应用程序框架。使用Qt&#xff0c;在一定程度上你获得的是一个“一站式”、“全方位”的解决方案&#xff0c;STL、string、XML、数据库、网络这些…

mysql函数未定义_未定义的函数,MYSQL错误

提交以下表单时&#xff0c;我收到此错误&#xff1a;Fatal error: Call to undefined function mysqli_connect() in .... mailing_list_include.php on line 7这里是mailing_list_include.php文件 - 真正的东西包括访问数据库的正确凭据function doDB() {global $mysqli;// c…

简单的实现RAII封装。

简单的实现RAII封装。前面的文章中介绍了通过RAII的技术实现保证资源被释放和某函数被执行的类似finally关键字的功能。并演示了一个通过boost的function和bind的两个库实现的通用RAII封装类。 那个例子固然通用而有效&#xff0c;然而&#xff0c;我们有时项目中并没有用到boo…

二叉树序列化

文件的大小尽可能的小。 想了四种方法&#xff1a; 第一种方法&#xff1a;把二叉树按前序和中序遍历一遍&#xff0c;存两次二叉树。 第二种方法&#xff1a;将二叉树按左枝为0&#xff0c;右枝为1进行路径编码&#xff0c;那么每个节点都可以表示成&#xff0c;节点信息和路径…

【转】OWIN是什么?

OWIN的英文全称是Open Web Interface for .NET。 如果仅从名称上解析&#xff0c;可以得出这样的信息&#xff1a;OWIN是针对.NET平台的开放Web接口。 那Web接口是谁和谁之间的接口呢&#xff1f;是Web应用程序与Web服务器之间的接口&#xff0c;OWIN就是.NET Web应用程序与W…

java 切换panel会闪烁_【19期】为什么Java线程没有Running状态?

Java虚拟机层面所暴露给我们的状态&#xff0c;与操作系统底层的线程状态是两个不同层面的事。具体而言&#xff0c;这里说的 Java 线程状态均来自于 Thread 类下的 State 这一内部枚举类中所定义的状态&#xff1a;什么是 RUNNABLE&#xff1f;直接看它的 Javadoc 中的说明&am…

winCE下Unicode编码

Unicode &#xff1a;宽字节字符集1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数&#xff1f;可以调用Microsoft Visual C的运行期库包含函数_mbslen来操作多字节&#xff08;既包括单字节也包括双字节&#xff09;字符串。调用strlen函数&#xff0c;无…