下面的这个例子使用 Win32 API 函数和通用数据类型设置 C 盘的卷标。 //****************** // drvsvl.cpp
#include <windows.h> #include <iostream.h>
void main() { BOOL success; char volumeName[MAX_PATH];
cout << "输入新的 C 盘卷标:"; cin >> volumeName;
success = SetVolumeLabel("c://", volumeName); if (success) cout << "成功/n"; else cout << "错误代码:" << GetLastError() << endl; } 通过使用 TCHAR 数据类型,将这段代码最上面的字符数组声明为两个字节的字符。TEXT 宏再次被用于字符串常量: void main() { BOOL success;
TCHAR volumeName[MAX_PATH];
cout << TEXT("输入新的 C 盘卷标: "); cin >> volumeName;
success = SetVolumeLabel(TEXT("c://" ), volumeName); if (success) cout << TEXT("成功/n"); else cout << TEXT("错误代码:") << GetLastError() << endl; } Visual C++ 中的通用数据类型 Visual C++ 提供了几种 MFC 专用的数据类型用于创建具有国际化特性的应用程序。这些定义很通用,完全可以在 UNICODE、ASCII、DBCS (双字节字符集) 和 MBCS (多字节字符集)。由于篇幅所限,本文不打算涉及所有上面提到的这些字符集。有关它们的详细资料请参考相关资料。MFC 提供了一种透明的方式来实现这些字符集。通用数据类型的映射到哪个字符集以及映射方式是根据工程的设置决定的,默认值为 ASCII 模式,其它几个可选项是 MBCS、DBCS 或者 UNICODE。本文主要讨论 UNICODE,所以下表中只列出了 ASCII 与 UNICODE 字符之间的映射关系: 通用 MFC 数据类型 映射到 ASCII 映射到 UNICODE 注释 _TCHAR char wchar_t _TCHAR 是一个映射宏,当定义 UNICODE 时,该数据类型映射到 wchar_t,如果没有定义 UNICODE,那么它映射到 char。 _T 或 _TEXT char 常量字符串 wchar_t 常量字符串 功能与宏相同,在 ASCII 模式下,它们被忽略,也就是说被预处理器删除掉,但是如果定义了UNICODE, 则它们会将常量字符串转换成等价的 UNICODE 。 LPTSTR char*, LPSTR(Win32) wchar_t* 可移植的32位字符串指针。它将字符类型映射到工程设置的类型。 LPCTSTR const char*, LPCSTR(Win32) const wchar_t* 可移植的32位常量字符串指针。它将字符类型常量映射到工程设置的类型。
结束语 综上所述可以看到,编译 UNICODE 版本的程序并不难。只是在编写代码时记住函数调用上些微的变化。微软为此提供的扩展是开发人员能够以透明的方式选择所用的字符集,为应用软件的国际化打开了方便之门。 |