|
_UNICODE识别字,那么一个称作__T的巨集就定义如下:
#define __T(x) L##x
这是相当晦涩的语法,但合乎ANSI C标准的前置处理器规范。那一对井字号称为「粘贴符号(token
paste)」,它将字母L添加到巨集引数上。因此,如果巨集引数是"Hello!",则L##x就是L"Hello!"。
如果没有定义_UNICODE识别字,则__T巨集只简单地定义如下:
#define __T(x) x
此外,还有两个巨集与__T定义相同:
#define _T(x) __T(x) #define _TEXT(x) __T(x)
在Win32
console程式中使用哪个巨集,取决於您喜欢简洁还是详细。基本地,必须按下述方法在_T或_TEXT巨集内定义字串文字:
_TEXT ("Hello!")
这样做的话,如果定义了_UNICODE,那么该串将解释为宽字元的组合,否则解释为8位元的字元字串。
宽字元和WINDOWS
Windows
NT从底层支援Unicode。这意味著Windows NT内部使用由16位元字元组成的字串。因为世界上其他许多地方还不使用16位元字串,所以Windows
NT必须经常将字串在作业系统内转换。Windows NT可执行为ASCII、Unicode或者ASCII和Unicode混合编写的程式。即,Windows
NT支援不同的API函式呼叫,这些函式接受8位元或16位元的字串(我们将马上看到这是如何动作的。)
相对於Windows
NT,Windows 98对Unicode的支援要少得多。只有很少的Windows 98函式呼叫支援宽字串(这些函式列在《Microsoft Knowledge
Base article Q125671》中;它们包括MessageBox)。如果要发行的程式中只有一个.EXE档案要求在Windows NT和Windows
98下都能执行,那么就不应该使用Unicode,否则就不能在Windows
98下执行;尤其程式不能呼叫Unicode版的Windows函式。这样,将来发行Unicode版的程式时会处於更有利的位置,您应试著编写既为ASCII又为Unicode编译的原始码。这就是本书中所有程式的编写方式。
Windows表头档案类型
正如您在第一章所看到的那样,一个Windows程式包括表 |