Unicode

 刚才写了满满一篇,居然给发表丢了。很郁闷,决定重写一遍,当温习了。

即使现在你不打算对应用程序进行本地化,开发时将U n i c o d e放在心上,肯定可以简化将来的代码转换工作

。此外, U n i c o d e还具备下列功能:
? 可以很容易地在不同语言之间进行数据交换。
? 使你能够分配支持所有语言的单个二进制. e x e文件或D L L文件。
? 提高应用程序的运行效率(后面还要详细介绍)。

Windows 2000是使用U n i c o d e从头进行开发的,,用于创建窗口、显示文本、进行字符串操作等的所有核心函数都需要U n i c o d e字符串。如果调用任何一个Wi n d o w s函数并给它传递一个A N S I字符串,那么系统首先要把字符串转换成U n i c o d e,然后将U n i c o d e字符串传递给操作系统。当然,进行这些字符串的转换需要占用系统的时间和内存。

为了使Windows CE尽量做得小一些,M i c r o s o f t公司决定完全不支持ANSI Wi n d o w s函数。因此,如果要为Windows CE开发应用程序,必须懂得U n i c o d e,并且在整个应用程序中使用U n i c o d e。

当M i c r o s o f t公司将C O M从1 6位Wi n d o w s转换成Wi n 3 2时,公司作出了一个决定,即需要字符串的所有C O M接口方法都只能接受U n i c o d e字符串。这是个了不起的决定,因为C O M通常用于使不同的组件能够互相进行通信,而U n i c o d e则是传递字符串的最佳手段。

U N I C O D E和_ U N I C O D E:。_ U N I C O D E宏用于C运行期头文件,而U N I C O D E宏则用于Wi n d o w s头文件。当编译源代码模块时,通常必须同时定义这两个宏。

C运行期库对U n i c o d e的支持:为了利用U n i c o d e字符串,定义了一些数据类型。标准的C头文件S t r i n g . h已经作了修改,以便定义一个名字为w c h a r _ t的数据类型,它是一个U n i c o d e字符的数据类型。所有的U n i c o d e字符串函数均以w c s开头,w c s是宽字符串的英文缩写。若要调用U n i c o d e函数,只需用前缀w c s来取代A N S I字符串函数的前缀s t r即可。

对于包含了对s t r函数或w c s函数进行显式调用的代码来说,无法非常容易地同时为A N S I和U n i c o d e对这些代码进行编译,若要建立双重功能,必须包含T C h a r. h文件,而不是包含S t r i n g . h文件。T C h a r. h文件的唯一作用是帮助创建A N S I / U n i c o d e通用源代码文件。它包含你应该用在源代码中的一组宏。

若要定义一个A N S I / U n i c o d e通用的字符串数组,请使用下面的T C H A R数据类型。如TCHAR *szError = "error",但这个代码还是有问题的,如果定义了_UNICODE宏的话,编译将会出错,应该为TCHAR *szError = L"error",这就需要另外一个宏_TEXT了。

windows头文件和api:windows头文件定义了3个unicode类型:WCHAR PWSTR PCWSTR, Wi n d o w s头文件也定义了A N S I / U n i c o d e通用数据类型P T S T R和P C T S T R.

在Windows 2000下,M i c r o s o f t的C r e a t e Wi n d o w E x A源代码只不过是一个形实替换程序层或翻译层,用于分配内存,以便将A N S I字符串转换成U n i c o d e字符串。该代码然后调用C r e a t eWi n d o w E x W,并传递转换后的字符串。当C r e a t e Wi n d o w E x W返回时,C r e a t e Wi n d o w E x A便释放它的内存缓存,并将窗口句柄返回给你。如果要创建其他软件开发人员将要使用的动态链接库( D L L),请考虑使用下面的方法。在D L L中提供两个输出函数。一个是A N S I版本,另一个是U n i c o d e版本。在A N S I版本中,只需要分配内存,执行必要的字符串转换,并调用该函数的U n i c o d e版本.

Windows API中的某些函数,比如Wi n E x e c和O p e n F i l e等,只是为了实现与1 6位Wi n d o w s程序的向后兼容而存在,因此,应该避免使用。应该使用对C r e a t e P r o c e s s和C r e a t e F i l e函数的调用来取代对Wi n E x e c和O p e n F i l e函数的调用。从系统内部来讲,老的函数完全可以调用新的函数。老的函数存在的一个大问题是,它们不接受U n i c o d e字符串。当调用这些函数时,必须传递A N S I字符串。另一方面,所有新的和未过时的函数在Windows 2000中都同时拥有A N S I和U n i c o d e两个版本。

Wi n d o w s还提供了一组范围很广的字符串操作函数。这些函数与C运行期字符串函数(如s t r c p y和w c sc p y)很相似。但是该操作系统函数是操作系统的一个组成部分,操作系统的许多组件都使用这些函数,而不使用C运行期库。建议最好使用操作系统函数,而不要使用C运行期字符串函数。这将有助于稍稍提高你的应用程序的运行性能,因为操作系统字符串函数常常被大型应用程序比如操作系统的外壳进程E x p l o r e r. e x e所使用。由于这些函数使用得很多,因此,在你的应用程序运行时,它们可能已经被装入R A M。在经典的操作系统函数样式中,操作系统字符串函数名既包含大写字母,也包含小写字母,它的形式类似这个样子: S t r C a t、S t r C h r、S t r C m p和S t r C p y等。若要使用这些函数,必须加上S h l WA p i . h头文件

PS:妈的,刚才居然发表丢了,拷贝一份先,唉,没时间打魔兽了。。。。。。。。。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值