在 VB 中使用 Unicode API
介绍
也许大家都知道,Visual Basic 内部的所有和字符串相关的函数使用的都是 Unicode。
Unicode 是一套字符集。与其他传统单一字节的字符集不同的是,它使用两个字节来表示一个字符,这使得可用字符的数量大大增加(理论上说,一个字节可以包含最多 256 个字符,而两个字节可以包含 65536 个字符)。在这里请注意,不要把 GB2312 之类的双字节字符集和 Unicode 混淆:前者既有单字节字符(如英文)也有双字节字符(如中文),这样使得管理十分麻烦,并且它只支持一种代码页;而 Unicode 的字符都是双字节的,使得管理、转换和使用字符串变得十分容易。并且它支持世界上的所有的常用文字,使得一个程序可以同时在屏幕上显示多种语言的文字,而不用关心当前的代码页。
好了在简单地介绍了 Unicode 之后,现在来介绍 Unicode API(什么?不知道什么是 API ?(汗)如果是那样的话这篇文章可能不太适合你)。
Windows NT 从一开始就在其内部使用 Unicode ,以至于其后续产品(Windows 2000、XP)都一直沿用它。而 Windows 95、98和 ME 就没有那么幸运,它们都一直使用单(双)字节的字符集。这样就使得同一个有关字符串的 API 有两个不同字符集的版本:Unicode 版和非 Unicode 版。在函数名上,Unicode 版的 API 具有一个 ''''W'''' 后缀代表 wide ,如:MessageBoxW;而非 Unicode 版的 API 具有一个 ''''A'''' 后缀代表 ANSI ,如:MessageBoxA。
在 Windows NT/2000/XP 上这两种版本的 API 都有,也就是说 Windows NT 支持 Unicode 和非 Unicode 字符集。而在 Windows 95/98/ME 上几乎所有 API 都只有其非 Unicode 版本,意味着它们之支持单(双)字节字符集。
VB 和 Unicode API
现在言归正传。VB 在使用了 Unicode 之后,可以享受到 Unicode 所带来的各种好处。不过,麻烦也随之而来了……
因为 Windows 95/98/ME 不支持 Unicode ,而 VB 只支持 Unicode ,所以当从 VB 里调用一个非 Unicode API 时,VB 先要把所有字符串都转换成非 Unicode 字符串,然后调用 API,最后把所有字符串再转换回 Unicode(见图1)。这样使得 API 的调用速度变得十分缓慢,而且效率很低。
┌─────────┐ ┌──────────────┐ ┌────────┐
│ │->│转换为非Unicode(A)│->│ │
│ │ └──────────────┘ │ API(A) │
│ VB程序(W) │ │ │
│ │ ┌─────────────┐ └────────┘
│ │<-│转换为Unicode(W)│<───────┘
└─────────┘ └─────────────┘
图1:调用非 Unicode API :需要转换来转换去
看到这里,也许有的人会问了“那为什么不用 Unicode API 呢?”在 API 查看器中的 API 都是非 Unicode 的(Alias 以 ''''A'''' 结尾),是因为兼容性问题。要让程序在 Windows 9x 和 NT 里都能执行,就必须要调用非 Unicode 的 API ,要不然的话会很麻烦;不过这是以性能为代价的。
如果程序需要高性能,经常使用需要传递字符串为参数的 API,而且只运行在 Windows NT/2000/XP 环境下的话(如服务器程序),完全可以用 Unicode API 来替换效率超低的非 Unicode API (见图2)。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




