V6 开发Unicode程序

来源:互联网 发布:蓝铅笔网络班 编辑:程序博客网 时间:2024/05/01 17:14

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位常量字符串指针。它将字符类型常量映射到工程设置的类型。

 

LPCTSTR,LPCSTR,LPTSTR,LPSTR的区别

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 */ 

原创粉丝点击