如果在代码中使用通用数据类型,则可以通过在头文件的include语句之前定义UNICODE来编译Unicode。要编译ANSI的代码,请省略UNICODE定义。
要转换处理字符串的代码,以便可以为ANSI或Unicode编译,请按照下列步骤操作。
1.将用于文本的所有字符和字符串类型更改为TCHAR,LPTSTR或LPTCH.
2.确保指向非文本数据缓冲区或二进制字节数组的指针使用LPBYTE类型进行编码,而不会错误地使用LPTSTR或LPTCH类型。根据需要,通过使用LPVOID将不确定类型的指针明确指定为void指针。
3.指针算术类型无关。如果定义了UNICODE,则使用TCHAR大小的单位产生两个字节的变量,如果未定义UNICODE,则会生成一个字节。使用指针算术总是返回指针指向的元素数量,不管元素大小是一个还是两个字节。以下表达式总是返回元素的数量,而不管是否定义了UNICODE:
cCount = lpEnd - lpStart;
以下表达式确定使用的字节数:
cByteCount = (lpEnd - lpStart) * sizeof(TCHAR);
没有必要更改如下所示的语句,因为指针增量指向下一个字符元素。
chNext = *++lpText;
用宏替换文字字符串和清单字符常量。更改如下所示的表达式。
while(*lpFileName++ != '\\') {
/* .
/* .
/* .
}
在此表达式中使用TEXT宏。
while(*lpFileName++ != TEXT('\\')) {
./*
./*
./*
}
以字母【L】之前的Unicode函数的Unicode形式的字符串。当定义UNICODE时,TEXT宏会导致字符串被评估为L" 【串】 ",否则为【串】 ".以下对Unicode版本lstrlen的调用演示了使用L标识符。
cch == lstrlenW(L"hello world");
为了更容易的管理,将文字字符串移动到资源中,特别是如果它们包含ASCII范围之外的字符(即0x00到0x7F)。
5.只包含标准C库字符串函数的Unicode版本,如标准C功能中所列。
6.将任何依赖255的代码作为字符的最大值进行更改。
当您编译如上所述更改的代码时,编译器将创建与进行更改之前相同的二进制文件。但是,使用UNICODE选项编译代码时,会将其编译为Unicode应用程序。