学习wince的十个忠告
- 格式:doc
- 大小:37.50 KB
- 文档页数:9
Windows系统维护和清理技巧章节一:了解Windows系统Windows系统是目前世界上最常用的操作系统之一,它为我们提供了许多方便的功能和工具。
了解Windows系统的基本知识是学习维护和清理技巧的第一步。
1.1 Windows版本Windows系统有多个不同的版本,如Windows 7、Windows 8、Windows 10等。
每个版本都有不同的特点和功能,用户应根据自己的需求选择适合的版本。
1.2 Windows用户账户在Windows系统中,用户可以创建多个用户账户。
每个用户账户都有自己的个人设置和文件。
合理使用用户账户可以提高系统的安全性和稳定性。
章节二:系统维护技巧维护Windows系统的良好状态可以提高其性能和稳定性。
以下是几个常见的系统维护技巧。
2.1 更新Windows系统定期更新Windows系统是维护系统的关键步骤之一。
微软会发布安全补丁和系统更新,以修复漏洞和增加新功能。
用户应确保系统处于自动更新状态,或至少定期手动检查更新。
2.2 安装和更新驱动程序驱动程序是与硬件设备通信的软件。
更新和安装最新的驱动程序可以提高系统的稳定性和性能。
用户可以从驱动程序的制造商网站或Windows设备管理器中获取驱动程序更新。
2.3 硬盘维护保持硬盘的良好状态对系统的稳定性和性能至关重要。
以下是几个硬盘维护的技巧:- 通过使用Windows的磁盘清理工具,清除不需要的文件和文件夹。
- 使用磁盘碎片整理工具对硬盘进行碎片整理。
碎片整理可以提高文件的读写速度。
- 定期进行磁盘检查和修复,以确保硬盘没有错误和损坏。
章节三:系统清理技巧除了维护系统的基本步骤外,清理系统中的垃圾文件和无用程序也是重要的优化系统性能的技巧。
3.1 清理临时文件临时文件是系统和应用程序在运行过程中产生的文件,它们往往占用大量的硬盘空间。
用户可以使用Windows的磁盘清理工具或第三方清理工具来删除这些临时文件。
3.2 卸载无用程序随着时间的推移,我们安装和试用了很多程序,但并不是所有的程序都是我们真正需要的。
Windows CE 编程的十点忠告最近两周我们花了大部分时间将已有的应用程序移植到Microsoft Windows CE中。
一般说来,这个计划不是太难。
我们起步于Microsoft Win32代码,当然Windows CE是基于Win32应用程序接口(API)的。
有利的是,我们的应用程序(即Raima 数据管理器)有方便的使用接口,并包含一个大约由150个子函数组成的库,这些函数都是由C语言写成,可以用来创建、管理和访问数据库。
按建立应用程序的方式来说,我们原以为将它移植到Windows CE中是一项相对简单的C语言编程练习。
然而,我们不久便遇到好些困难。
从粗心大意的错误开始,比如在基于Windows NT 的Windows CE仿真器上使用Microsoft Windows NT库,接着又违背Windows CE的编程戒律,如"千万不要给Unicode(国际标准组织10646标准)字符分配奇数内存地址"。
大约有百分之九十的问题或多或少地与Unicode有关。
尽管Unicode编程不难,但是,当给单字节字符编写代码时,很容易出错(我有过许多次错误)。
下面这些忠告是根据我们在Windows CE上编写Raima 数据管理器的经验总结出来的,但我相信,在做任何其它Windows CE程序之前,它们都值得借鉴。
毕竟大多数Windows开发者,当他们创建第一个Windows CE应用程序时,真正运用的是已掌握的Win32知识。
1. 不要在仿真器上使用Windows NT库这里所讨论的第一个错误实在太愚蠢了,但我还是陷了进去,也许你也会。
当用Microsoft VC++(5.0版)创建一个Windows CE程序时,你会发现,包含路径(include)、库路径(library)、及可执行程序路径被自动调整以匹配反应目标环境的选择。
因此,比如说为Windows CE模拟器建立应用程序时,你会发现,include路径没有指向Win32的包含文件(在VC目录下),而是指向Windows CE包含文件(在WCE目录下)。
华为电脑十大忠告华为电脑十大忠告,为广大用户提供了一些有益的建议,以保证华为电脑的正常运行和长期使用。
在这里,我们为大家总结了这些忠告,并为大家展示其具体指导意义。
忠告一:避免使用未经授权的软件在使用华为电脑时,我们强烈建议您避免使用未经授权的软件。
这些软件可能会包含病毒或其他恶意代码,会对电脑的性能和安全造成严重的影响。
因此,我们建议您只使用官方授权的软件。
忠告二:定期备份重要数据数据备份是保证数据安全的最佳方式。
在使用华为电脑时,请定期备份重要数据,以防止数据丢失或损毁。
备份最好保存在云端或外部硬盘上,以保证文件的安全性。
忠告三:定期升级系统和软件华为电脑系统和软件的更新版本通常包含了更多的修复和安全性有所提高。
因此,我们建议您定期升级系统和软件。
以提高系统的安全性和稳定性的同时也可以增强软件的功能和效率。
忠告四:避免频繁的重启电脑频繁的重启电脑会占用电脑资源,影响电脑性能。
因此,我们建议您避免频繁的重启电脑。
只有在电脑出现故障或需要重装系统时,才需要重启电脑。
忠告五:定期清理电脑垃圾文件电脑垃圾文件会占用硬盘空间,影响电脑性能和速度。
我们建议您定期清理电脑垃圾文件,并删除不必要的文件和程序。
定期清理电脑可以使系统更加稳定,速度更快。
忠告六:避免电脑静电电脑静电会对电脑硬件造成严重破坏。
因此,我们建议您避免电脑静电,禁止手握电脑金属部件进行操作,以免造成不必要的损失。
忠告七:避免因网络欺诈而遭受损失网络欺诈非常普遍,许多不法分子通过网络诈骗您的个人信息和资金。
因此,请注意保护个人隐私,不要随意发表个人信息,同时避免点击不明来源的链接或下载不明软件。
忠告八:避免长时间对电脑作业长时间对电脑作业会对眼睛造成不良影响,并可能引起肩颈等部位的疼痛。
如果您需要长时间使用电脑,我们建议您定期进行休息和活动,保持身体健康。
忠告九:使用原装电池、电源和配件使用正宗电池、电源和配件可以提高电脑的安全性和可靠性。
第1章1.3.1Windows CE的特点1.精简的模块化操作系统Windows CE的可裁减性,使其体积也非常小。
一个最小的可运行Windows CE内核只占200KB 左右。
2.多硬件平台支持3.支持有线和无线的网络连接4.稳健的实时性支持实时性是指能够在限定时间内执行完规定的功能,并对外部的异步事件做出反应的能力。
Windows CE是一个实时操作系统。
实时支持功能在以下几方面提升了Windows CE的性能:(1) 支持嵌套中断。
(2) 允许更高优先级别的中断首先得到响应,而不是等待低级别的ISR完成。
(3) 更好的线程响应能力。
(4) 对高级别IST(中断服务线程)的响应时间上限的要求更加严格,在线程响应能力方面的改进帮助开发人员掌握线程转换的具体时间,并通过增强的监控能力和对硬件的控制能力帮助开发人员创建更好嵌入式应用程序。
(5) 更多的优先级别。
256个优先级别可以使开发人员在控制嵌入式系统的时序安排方面有更大的灵活性。
(6) 更强的控制能力。
对系统内的线程数量的控制能力可以使开发人员更好地掌握调度程序的工作情况。
5.丰富的多媒体和多语言支持6.强大的开发工具第2章2.1.1Windows CE的层次体系结构Windows CE属于比较典型的微内核操作系统。
在内核中仅仅实现进程、线程、调度及内存管理等最基本模块。
层次化的概念、特点:在层次化设计方法中,一个完整的系统被划分成彼此相关的多个层次。
每一个层次都有自己的关注要点和要实现功能。
层次与层次之间构成单项依赖,原则上每一个层次都只与它的相邻层次打交道:利用它下一层提供的服务构建自身,同时向更高层提供一些服务。
层次化设计有利于重用逻辑,并且使系统有良好的扩展性和可维护性。
图2-1 Windows CE的体系结构基于Windows CE构建的嵌入式系统大致可以分为四个层次,从下到上依次是:硬件层,OEM层,操作系统层和应用层。
嵌入式系统中的硬件通常具有以下特点:1. 处理器体系结构不统一2. 硬件资源通常受限3. 外部设备的种类繁多4. 有实时性和可靠性要求2.1.3 OEM层(Original Equipment Manufacturer,原始设备制造商)OEM层是逻辑上位于硬件和Windows CE操纵系统之间的一层硬件相关的代码。
WinCE自学手册2009-11-15 11:30 A.M.(一)胡言乱语前几天,在学校,游荡于实验室和图书馆,偶尔去自习室,整理了自己半年来学习WinCE的经验,写了大二之后的第一份笔记因为也要写毕业论文了,而今后的工作也不知道会不会和WinCE有关了,所以把这些记录下来,证明我的存在恩,即使有的东西会消失,有的人会忘记,所有的事情都会过去,但只要存在过,那就好了===================================================首先,推荐几本书,中文的,或许会有点用,这也是会不定期更新添加的,毕竟,好书,是值得珍惜的1.Windows CE开发实例精粹张冬泉、谭南林电子工业出版社 2008推荐理由:从WinCE4.2到WinCE6.0都有介绍,适合新手上路2.EVC高级编程及其应用开发(Embedded Visual C++嵌入式编程)汪兵、李存斌、陈鹏中国水利水电出版社 2005推荐理由:很好的介绍了WinCE3.0和EVC,提高实际编程能力,适合有一定基础3.Windows CE 实用开发技术张冬泉、谭南林、王雪梅、焦风川电子工业出版社 2006推荐理由:基于WinCE4.0和WinCE5.0,主要是理论方面,我也只是大概看了看4.Windows 内核定制及应用开发周毓林、宁杨、陆贵强电子工业出版社 2005推荐理由:很详细,理论性和实用性都很好,适合有一定基础5.Windows CE嵌入式系统开发从基础到实践薛大龙、陈世帝、王韵电子工业出版社 2008推荐理由:这本书我没看全,但从/cebook/看到的一些试读内容,感觉很不错==================================================先推荐了5本中文的,适合不同基础和目的的CEer,有条件的话可以找来看看当然,还有很多好书,比如 Programming MS WinCE 什么的,只是,要么是英文,要么是要求太高,我这么一个初学者是看不懂的额,闲话不多说,下面就开始我的小白自学之旅吧WinCE自学手册(二)为什么选择WinCE?为什么我会选择WinCE?其实答案是很无奈的,因为在半年前的某天,导师把我叫到办公室,分配毕业设计题目:你专业学的不好,挂了好几科要重修,非专业的东西也就写程序能拿的出来了,那你就做这个吧,WinCE,EVC...什么,你不知道WinCE?也不知道EVC?那你回去找资料看吧,你毕业设计就做这个了...所以,我就选择了WinCE,问起别的做嵌入式开发的,答案也是很多的,但大多还是说:微软是老大哥,跟着微软混总是没错的...那好吧,我也就这么跟着混吧~=======================================================首先,给个WinCE的发展历程表而由此看来,WinCE已经发展了好多年了,并且有了很多版本,额,当然,上面这个图还不全啊,在这以后,微软又更新了Windows Embedded CE 6.0 的SP1和R2;而在2008年4月微软推出了Windows Mobile 6.1,内核仍为Windows CE5.2;最后,在2009年2月16日微软推出了新一代手机系统——Windows Mobile6.5,并宣布,Windows mobile 6.5以后的名字不再使用,而是统一使用Windows phones。
Windows 10 培训欢迎使用Windows 10Windows 10 旨在成为迄今为止最好的Windows.借助数百万用户的测试以及他们提供的反馈和想法,Windows 10 将熟悉的用户界面、高效与创新特性—包括私人语音助手和全新浏览器- 以及您期待的Windows 基本特性,例如出色的安全功能和兼容性完美集于一身。
您将免费获得始终开启的更新,让您的系统在设备的支持周期内时刻保持最新状态,这在Windows的历史上尚属首次。
Windows 10 为您带来快速上手、简单易用的新鲜体验,并且能够更好地帮助您处理重要事项。
选择安装方式全新安装操作系统(需要输入正确的产品密钥后,点击〈下一步>。
或暂时不输入产品密钥,点击跳过,但无法激活Windows,需要后续在系统中输入正确的序列号方可激活)需要破解版!•安装Windows 10 到原有分区。
•格式化现有分区,不会保留用户个人配置和应用程序。
升级安装(不需产品密钥,不需要序列号,升级后可以无限制使用win10)•替换现有版本的Windows 到Windows 10。
•原有Windows 文件夹变为Windows.old。
保留所有的用户个人数据,系统设置和应用程序。
熟悉、实时更新Windows 10 是您熟悉的Windows,外加众多全新功能,保持最新状态、与时俱进。
Windows 10 友好、熟悉、易于使用。
为了让您获得无缝、新鲜、甚至超前的科技体验,它使用自动更新帮助您获得最新特性和安全保护。
无论您身在何处,无论您使用什么设备,OneDrive 在线存储都支持您保存、访问并共享内容。
这就是Windows,它可以与您现有的绝大多数硬件和软件良好兼容。
“开始"菜单熟悉的“开始”菜单以更好用并可扩展的形式回归,可以一键单击访问用户使用最多的功能和文件。
您可以快速访问最常用的应用和PC 设置,还可以添加更多喜爱的动态磁贴。
无论您使用Windows 7 或Windows 8,全新“开始”菜单都很熟悉。
给经常鼓捣电脑的“电脑高手”的几点忠告1、首先记住这句话:永远不要承认自己是高手,因为这个称号是要付出代价的。
2、接到陌生电话后,一定要问清楚对方有什么事情,然后再告诉他(她)当前你目前所在的位置。
3、永远不要试图通过电话或者QQ解决某个问题,对方很有可能不知道菜单是什么东西,这不能怨他们,只能怨你自己,因为你永远懒于解释给他们听。
4、不要想着立马可以解决遇到的问题,因为你所遇到的总是崩溃的系统或者处于崩溃边缘的系统。
5、如果对方允许你重新安装系统,那就不要试着去做任何修复工作,因为重装系统是最快解决问题的办法。
6、除了询问哪些资料需要备份,你不要提问对方任何问题,除非你的心理承受能力特别强。
7、学会保守做人,每次开工前,都记得告诉对方:“我可能无法最终解决问题,还要继续吗?”。
8、对电脑的外观检查永远是第一位的,看看线路是否连接正常,看看USB接口是否连接了其他设备等等9、相信硬件的抗噪能力,尽可能的情况下,不要打开对方的机箱。
没有做成医生,反倒被当作破坏者,那是很悲哀的事情。
10、做好被别人数落的心理准备,因为不懂电脑知识的人,往往懂得如何评价别人。
11、如果人家说他的内存有200G,你千万不要纠正说是硬盘,否则,你的噩运即将来临。
12、不知道菜单是什么东西的人,一般也会知道虚拟内存是怎么回事的,按照他的要求去调整就可以了,反正这个不会影响到你完成修理工作。
13、告诉对方,你没有任何杀毒软件,否则,您所安装的杀毒软件都是最差的,也是问题最多的。
14、别让自己成为处理打印机故障的高手,告诉你,打印机的麻烦事情可比电脑多多了。
15、坚决不要帮别人购买电脑,尤其是组装机,除非你想背上吃回扣的骂名,然后每天屁颠屁颠的去帮他们处理故障。
16、不要反感以下两句话,它会伴随你很久时间:第一句:“我的电脑又出大问题了。
”第二句:“你还是过来帮我看看吧。
”另外忠告在办公室工作的朋友,要记住以下几点原则:1、尽量不要去动别人的电脑,否则,若干天以后,你的这一行动会导致他的系统崩溃并带来埋怨。
送给初入it行业人员的一些忠告送给初入IT行业人员的一些忠告随着科技的不断发展,IT行业也变得越来越热门。
如果你刚刚进入IT行业,这里有一些忠告可以帮助你更好地适应这个领域。
1.不要放弃学习IT行业是一个不断发展的领域,新技术和新工具不断涌现。
如果你停止学习,你就会被其他人超越。
要时刻关注行业趋势和最新技术,不断学习和提高自己的技能。
2.不要懒惰IT行业的工作需要投入大量的时间和精力。
如果你不肯付出努力,你就不可能成功。
在工作中要有耐心和毅力,不要因为遇到困难就放弃。
3.不要害怕提问在IT行业,你会遇到很多新问题。
不要害怕提问,不要畏惧被认为是“笨蛋”。
相反,提问是展示你对问题的兴趣和求知欲的好方法。
如果你不知道问题的答案,问别人是一个很好的学习机会。
4.不要陷入舒适区在IT行业,你需要不断地挑战自己。
不要陷入舒适区,要时刻寻求机会来学习新的技能和解决新的问题。
只有不断挑战自己,你才能不断提高自己的技能和知识。
5.不要放弃团队合作IT行业需要团队合作。
不要把自己孤立起来,要积极地与同事合作,分享知识和经验。
要尊重和倾听别人的意见,学会与不同的人合作。
6.不要忽视自我管理在IT行业,你需要管理好自己的时间和精力。
要有一个清晰的计划和目标,不要让自己被琐碎的工作和无意义的任务所占据。
要学会分配时间和优先顺序,保持高效率。
7.不要忘记用户体验在IT行业,用户体验至关重要。
在设计和开发产品时,要时刻考虑用户的需求和体验。
要以用户为中心,设计出易于使用、直观和高效的产品。
8.不要忘记交流在IT行业,交流是非常重要的。
不要只关注自己的工作,要时刻与同事交流,分享知识和经验。
要尊重和倾听别人的意见,学会与不同的人交流。
9.不要忘记休息在IT行业,工作压力非常大。
不要忘记休息和放松自己。
要保持身体和心理健康,才能更好地工作和生活。
初入IT行业的人员需要时刻保持学习、进取、勇于挑战自己的态度,才能在这个领域中获得成功。
本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==Windows使用者必须了解的10个技巧导语:在过去几年中,Windows系统并未发生重大的改变(至少在桌面效果上),但每一个新版本的更新,都带来了一些细微的调整和提升。
以下是小编精心整理的有关电脑技巧的知识,希望对大家有所帮助。
1. 升级到Windows 8(8.1)系统好吧,这肯定是一个最有争议性的建议。
可以肯定的是,Windows 8系统在触摸屏设备上的使用效果肯定是要比之前版本更好的,如果你拥有一款触摸屏笔记本或是平板电脑,一定可以感受到。
当然,“开始”菜单消失、两种不同版本应用的交错(Metro应用和传统桌面应用),可能也会让初次上手的用户感到错愕。
但不能否认的是Windows 8拥有更好的性能、增强的安全性、新的资源管理器等新功能。
当然,如果你是一个游戏用户或是十分讨厌Windows 8,可以选择不升级或是降级,但并非所有PC产品都能够支持降级,还是建议你在选购时详细了解一下可选配置的信息。
如果你想升级Windows 8但又对一些设计感到纠结,有两种方法可以解决:等待新版Windows 8.1的正式上市,基本上任何预装Windows 8系统的PC都可以免费升级到8.1,你可以获得开始按钮以及一系列的新功能。
如果你想现在就获得改善,那么可以选择一些第三方应用来实现,比如可以重新带回开始菜单的软件如“Start8”、“StartMenu8”等。
2. 探索Windows系统的隐秘功能不论是Windows 7还是Windows 8系统,实际上都有一些不为人知的隐秘小功能,能够增强使用体验。
或许你需要一段时间来了解和掌握,但真的值得尝试。
以下列举部分隐秘功能,感兴趣的用户可以自行搜索更多内容。
· 在资源管理器中,按住Shift键右键点击文件,选择“发送到”目录,你可以看到除了常规的选项,会出现一系列用户文件夹目录,包括图片、音乐、视频等,更加方便。
学习wince的十个忠告-- 作者:zshan-- 发布时间:2007/11/20 11:53am将已有的应用程序移植到Microsoft Windows CE中。
一般说来,这个计划不是太难。
我们起步于Microsoft Win32代码,当然Windows CE是基于Win32应用程序接口(API)的。
有利的是,我们的应用程序(即Ra ima 数据管理器)有方便的使用接口,并包含一个大约由150个子函数组成的库,这些函数都是由C语言写成,可以用来创建、管理和访问数据库。
按建立应用程序的方式来说,我们原以为将它移植到Windows CE中是一项相对简单的C语言编程练习。
然而,我们不久便遇到好些困难。
从粗心大意的错误开始,比如在基于Windows NT 的Windows CE仿真器上使用Microsoft Windows NT库,接着又违背Windows CE的编程戒律,如"千万不要给Unicode(国际标准组织10646标准)字符分配奇数内存地址"。
大约有百分之九十的问题或多或少地与Unicode有关。
尽管Unicode编程不难,但是,当给单字节字符编写代码时,很容易出错(我有过许多次错误)。
下面这些忠告是根据我们在Windows CE上编写Raima 数据管理器的经验总结出来的,但我相信,在做任何其它Windows CE程序之前,它们都值得借鉴。
毕竟大多数Windows开发者,当他们创建第一个Windo ws CE应用程序时,真正运用的是已掌握的Win32知识。
1. 不要在仿真器上使用Windows NT库这里所讨论的第一个错误实在太愚蠢了,但我还是陷了进去,也许你也会。
当用Microsoft VC++(5.0版)创建一个Windows CE程序时,你会发现,包含路径(include)、库路径(library)、及可执行程序路径被自动调整以匹配反应目标环境的选择。
因此,比如说为Windows CE模拟器建立应用程序时,你会发现,incl ude路径没有指向Win32的包含文件(在VC目录下),而是指向Windows CE包含文件(在WCE目录下)。
千万别去修改。
由于Windows CE在Windows NT下运行,所以仿真器上运行的程序能够调用任一Windows NT动态链接库(DLL)中的函数,即使这个DLL不是模拟器的成员也一样。
显然,这不是很好的事,因为相同的函数也许在手持PC(H/PC)或Windows CE设备上不可用,而你的软件最终要能在这些设备上运行。
第一次将非Unicode应用程序装入Windows CE仿真器时,你会发现,许多正在使用的函数它都不支持,例如美国国家标准协会(ANSI)定义的字符函数strcpy()。
这也许引诱你去链接Windows NT 运行时间库,以便能解决所有问题。
如果你是刚开始用Windows CE编程,可能你能用的包含文件和库文件是明显的。
答案就是,你不要采用那些在写普通Win32或非Windows CE程序时使用的包含文件和库文件。
2. 不要混淆TCHARs和bytes如果你正在Windows CE上写非Unicode应用程序,你或许要将所有的字符串从单个字符(chars)转换为宽字符(widechars)(例如,C变量类型whcar_t)。
几乎所有Windows CE支持的Win32和运行时间库函数都要求宽字符变量。
Windows 95不支持Unicode,然而,为了使程序代码具有可移植性,你要尽可能采用tchar.h中定义的TCHAR类型,不要直接使用wchar_t。
TCHAR是定义为wchar_t还是char,取决于预处理器的符号UNICODE是否定义。
同样,所有有关字符串处理函数的宏,如_tcsncpy宏,它是定义为Unicode函数wcsncpy还是定义为ANSI函数strncpy,取决于UNICODE是否定义。
在现存的Windows应用程序中,有些代码也许暗示字符长为单字节。
这在给字符串分配内存时经常用到,例如:int myfunc(char *p){char *pszFileName;pszFileName = malloc(MAXFILELEN);if(pszFileName)strncpy(pszFileName, p, MAXFILELEN);/*etc*/在这段代码中,分配的内存块应该写作(MAXFILELEN * sizeof(char)),但是大多数程序员喜欢将它简化为MAXFILELEN,因为对于所有的平台来说sizeof(char)的值等于1。
然而,当你用TCHARS代替多个字符时,很容易忘记这种固有的概念,于是将代码编写成下面的形式:int myfunc(TCHAR *p){TCHAR *pszFileName;PszFileName = (TCHAR*)malloc(MAXFILELEN);If (pszFileName)tcsncpy(pszFileName, p, MAXFILELEN);/*etc*/这是不行的。
它马上会导致出错。
这里的错误在于malloc函数中指定变量大小为bytes,然而_tcsncpy函数中使用的第三个变量却指定为TCHARs而不是bytes。
当UNICODE被定义时,一个TCHAR等于两个字节数(bytes)。
上述代码段应该改写为:int myfunc(TCHAR *p){TCHAR *pszFileName;PszFileName = (TCHAR*)malloc(MAXFILELEN * sizeof(TCHAR));if(pszFileName)tcsncpy(pszFileName, p, MAXFILELEN);/*etc*/3. 不要将Unicode 字符串放入奇数内存地址在Intel系列处理器上,你可以在一奇数内存地址储存任何变量或数组,不会导致任何致命的错误影响。
但在H/PC上,这一点不一定能行? 你必须对大于一个字节的数据类型小心谨慎,包括定义为无符号短型(unsi gned short)的wchar_t。
当你设法访问它们的时候,将它们置于奇地址会导致溢出。
编辑器经常在这些问题上提醒你。
你无法管理堆栈变量地址,并且编辑器会检查确定这些地址与变量类型是否相匹配。
同样,运行时间库必须保证从堆中分配的内存总是满足一个word边界,所以你一般不必担心那两点。
但是,如果应用程序含有用memcpy()函数拷贝内存区域的代码,或者使用了某种类型的指针算术以确定内存地址,问题也许就出现了。
考虑下面的例子:int send_name (TCHAR * pszName){char *p, *q;int nLen=(_tcslen(pszName) + 1) * sizeof(TCHAR);p=maloc(HEADER_SIZE + nLen);if(p){q = p + HEADER_SIZE;_tcscpy((TCHAR*)q, pszName);}/* etc */这段代码是从堆中分配内存并复制一个字符串,在字符串的开头留一个HEADER_SIZE的大小。
假设UNI CODE定义了,那么该字符串就是一个widechar字符串。
如果HEADER_SIZE是一个偶数,这段代码就会正常工作,但如果HEADER_SIZE为奇数,这段代码就会出错,因为q指向的地址也将为奇数。
注意,当你在Intel系列处理器中的Windows CE仿真器上测试这段代码时,这个问题是不会发生的。
在这个例子中,只要确保HEADER_SIZE为偶数,你就可以避免问题的发生。
然而,在某些情况下你也许不能这么做。
例如,如果程序是从一台式PC输入数据,你也许不得不采用事先定义过的二进制格式,尽管它对H/PC不适合。
在这种情况下,你必须采用函数,这些函数用字符指针控制字符串而不是TCHAR指针。
如果你知道字符串的长度,就可以用memcpy()复制字符串。
因此,采用逐个字节分析Unicode字符串的函数也许足以确定字符串在widechars中的长度。
4. 在ANSI和Unicode字符串之间进行翻译如果你的Windows CE应用程序接口于台式PC,也许你必须操作PC机中的ANSI字符串数据(例如,c har字符串)。
即使你在程序中只用到Unicode字符串,这都是事实。
你不能在Windows CE上处理一个ANSI字符串,因为没有操纵它们的库函数。
最好的解决办法是将ANS I字符串转换成Unicode字符串用到H/PC上,然后再将Unicode字符串转换回ANSI字符串用到PC上。
为了完成这些转换,可采用MultiByteToWideChar()和WideCharToMultiByte () Win32 API 函数。
5. 对于Windows CE 1.0的字符串转换,劈开(hack)在Windows CE 1.0 版本中,这些Win32API函数还没有完成。
所以如果你想既要支持CE 1.0又能支持CE 2.0,就必须采用其它函数。
将ANSI字符串转换成Unicode字符串可以用wsprintf(),其中第一个参数采用一widechar字符串,并且认识"%S"(大写),意思是一个字符串。
由于没有wsscanf() 和wsprintfA(),你必须想别的办法将Unicode字符串转换回ANSI字符串。
由于Windows CE 1.0不在国家语言支持(NLS)中,你也许得求助于hack,如下所示:/*Definition / prototypes of conversion functionsMulti-Byte (ANSI) to WideChar (Unicode)atow() converts from ANSI to widecharwtoa() converts from widechar to ANSI*/#if ( _WIN32_WCE >= 101)#define atow(strA, strW, lenW) \MultiByteToWidechar (CP_ACP, 0, strA, -1, strW, lenW)#define wtoa(strW, strA, lenA) \WideCharToMutiByte (CP_ACP, 0, strW, -1, strA, lenA, NULL, NULL)#else /* _WIN32_WCE >= 101)*//*MultiByteToWideChar () and WideCharToMultiByte() not supported o-n Windows CE 1.0 */int atow(char *strA, wchar_t *strW, int lenW);int wtoa(wchar_t *strW, char *strA, int lenA);endif /* _WIN32_WCE >= 101*/#if (_WIN32_WCE <101)int atow(char *strA, wchar_t *strW, int lenW){int len;char *pA;wchar_t *pW;/*Start with len=1, not len=0, as string length returnedmust include null terminator, as in MultiByteToWideChar()*/for(pA=strA, pW=strW, len=1; lenW; pA++, pW++, lenW--, len++){*pW = (lenW = =1) ? 0 : (wchar_t)( *pA);if( ! (*pW))break;}return len;}int wtoa(wxhar_t *strW, char *strA, int lenA){int len;char *pA;wchar_t *pW;/*Start with len=1,not len=0, as string length returnedMust include null terminator, as in WideCharToMultiByte()*/for(pA=strA, pW=strW, len=1; lenA; pa++, pW++, lenA--, len++){pA = (len==1)? 0 : (char)(pW);if(!(*pA))break;}return len;}#endif /*_WIN32_WCE<101*/这种适合于Windows CE 1.0的实现办法比使用wsprintf()函数要容易,因为使用wsprintf()函数更难以限制目标指针所指向的字符串的长度。