V6中开发可运行在不同语言系统的Unicode程序,大致步骤如下:
1、Project — Settings — C/C++ Tab — Preprocessor definitions:中加入_UNICODE, UNICODE。这里的_Unicode和Unicode的区别在于,后者专门用于C运行时同文件。后者用于Windows头文件。
2、将代码中的所有所有的 char 用TCHAR代替,所有char* 用LPTSTR代替。所有的win32字符串API用_tcs代替以前的str。比如strcpy 改成 _tcscpy。不过有的变化不是这样的,可以去google 搜一下。 另外所有的字符串常量放到_T()里(或_TEXT())里。
3、Project — Settings — Link — Category:Output — Entry-point symbol:中如果是exe执行文件添加 entry:wWinMainCRTStartup 程序入口,如果是dll添加:DllMainCRTStartup或什么也不添。
4、所过编译时提示缺少 mfc42ud.dll 等文件时,可以去安装文件中找到这些文件复制到VC的安装目录 /VC98/MFC/Lib下即可。
依照上面四步做完以后,你就可以开发一个Unicode 程序了。如果想生成一个ASCII的程序,只需将第一步骤中的_UNICODE, UNICODE去掉即可。编译器会根据是否有此声明来编译相对的程序文件。
附录:
1.
通用 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位常量字符串指针。它将字符类型常量映射到工程设置的类型。 |
LPCSTR 32-bit 指针,指向一个常量字串
LPSTR 32-bit 指针,指向一个字串
LPCTSTR 32-bit 指针,指向一个常量字串。此字串可移植到Unicode 和DBCS
LPTSTR 32-bit 指针,指向一个字串。此字串可移植到Unicode 和DBCS
另外,这里汇集不少的有关VC字符串的知识:http://hi.baidu.com/softways/blog/item/d93c34f37b884050352acc28.html
2.
/* ++++++++++++++++++++ UNICODE ++++++++++++++++++++ */
#define _TEOF WEOF
#define _tmain wmain
#ifdef UNDER_CE
# define _tWinMain WinMain // On CE it's always WinMain
#else
# define _tWinMain wWinMain
#endif
/* Formatted i/o */
#define _tprintf wprintf
#define _ftprintf fwprintf
#define _stprintf swprintf
#define _sntprintf _snwprintf
#define _vtprintf vwprintf
#define _vftprintf vfwprintf
#define _vstprintf vswprintf
#define _vsntprintf _vsnwprintf
#define _tscanf wscanf
#define _ftscanf fwscanf
#define _stscanf swscanf
/* Unformatted i/o */
#define _fgettc fgetwc
#define _fgetts fgetws
#define _fputtc fputwc
#define _fputts fputws
#define _gettc getwc
#define _gettchar getwchar
#define _getts _getws
#define _puttc putwc
#define _puttchar putwchar
#define _putts _putws
#define _ungettc ungetwc
// Stdio functions
#define _tfopen _wfopen
#define _tfreopen _wfreopen
/* String conversion functions */
#define _tcstod wcstod
#define _tcstol wcstol
#define _tcstoul wcstoul
#define _itot _itow
#define _ltot _ltow
#define _ultot _ultow
#define _ttoi _wtoi
#define _ttol _wtol
#define _ttoi64 _wtoi64
/* String functions */
#define _tcscat wcscat
#define _tcschr wcschr
#define _tcscmp wcscmp
#define _tcscpy wcscpy /这个是将字符串1 copy 到字符串2
#define _tcscspn wcscspn
#define _tcslen wcslen
#define _tcsclen wcslen
#define _tcsncat wcsncat
#define _tcsnccat wcsncat
#define _tcsnccmp wcsncmp
#define _tcsncmp wcsncmp
#define _tcsncpy wcsncpy
#define _tcsnccpy wcsncpy
#define _tcspbrk wcspbrk
#define _tcsrchr wcsrchr
#define _tcsspn wcsspn
#define _tcsstr wcsstr
#define _tcstok wcstok
#define _tcsdup _wcsdup
#define _tcsicmp _wcsicmp
#define _tcsncicmp _wcsnicmp
#define _tcsnicmp _wcsnicmp
#define _tcsnset _wcsnset
#define _tcsncset _wcsnset
#define _tcsrev _wcsrev
#define _tcsset _wcsset
#define _tcslwr _wcslwr
#define _tcsupr _wcsupr
// ctype functions
#define _istalpha iswalpha
#define _istupper iswupper
#define _istlower iswlower
#define _istdigit iswdigit
#define _istxdigit iswxdigit
#define _istspace iswspace
#define _istpunct iswpunct
#define _istalnum iswalnum
#define _istprint iswprint
#define _istgraph iswgraph
#define _istcntrl iswcntrl
#define _istascii iswascii
#define _totupper towupper
#define _totlower towlower
#define _istlegal(_c) (1)
#define _istlead(_c) (0)
#define _istleadbyte(_c) (0)
#else /* ndef UNICODE */