在 VB 中使用 Unicode API

2008-04-10 03:07:33来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

在 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)。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:用VB编写COM 应用时碰到问题?

下一篇:Visual Basic.Net连各种数据库的几种方法