def WCHAR TCHAR, * PTCHAR ; typedef LPWSTR LPTCH, PTCH, PTSTR, LPTSTR ; typedef LPCWSTR LPCTSTR ; #else typedef char TCHAR, * PTCHAR ; typedef LPSTR LPTCH, PTCH, PTSTR, LPTSTR ; typedef LPCSTR LPCTSTR ; #endif
如果已经在某个表头档案或者其他表头档案中定义了TCHAR资料型态,那么WINNT.H和WCHAR.H表头档案都能防止其重复定义。不过,无论何时在程式中使用其他表头档案时,都应在所有其他表头档案之前包含WINDOWS.H。
WINNT.H表头档案还定义了一个巨集,该巨集将L添加到字串的第一个引号前。如果定义了UNICODE识别字,则一个称作
__TEXT的巨集定义如下:
#define __TEXT(quote) L##quote
如果没有定义识别字UNICODE,则像这样定义__TEXT巨集:
#define __TEXT(quote) quote
此外,
TEXT巨集可这样定义:
#define TEXT(quote) __TEXT(quote)
这与TCHAR.H中定义_TEXT巨集的方法一样,只是不必操心底线。我将在本书中使用这个巨集的TEXT版本。
这些定义可使您在同一程式中混合使用ASCII和Unicode字串,或者编写一个可被ASCII或Unicode编译的程式。如果您希望明确定义8位元字元变数和字串,请使用CHAR、PCHAR(或者其他),以及带引号的字串。为明确地使用16位元字元变数和字串,请使用WCHAR、PWCHAR,并将L添加到引号前面。对於是8位还是16位取决於UNICODE识别字的定义的变数或字串,要使用TCHAR、PTCHAR和TEXT巨集。
Windows函式呼叫
从Windows
1.0到Windows 3.1的16位元Windows中,MessageBox函式位於动态连结程式库USER.EXE。在Windows
3.1软体开发套件的WINDOWS.H中,MessageBox函式定义如下:
int WINAPI MessageBox (HWND, LPCSTR, LPCSTR, UINT) ;
注意,函式的第二个、第三个参数是指向常数字串的指标。当编译连结一个Win16程式时,Wind |