`
gqh36gqh
  • 浏览: 16098 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

VC6下将ANSI程序转化为UNICODE基本步骤

 
阅读更多

VC6下将ANSI程序转化为UNICODE基本步骤
2011年04月07日
  VC6下将ANSI程序转化为UNICODE基本步骤 
  因为VC6默认建立的工程是ANSI模式(微软已经意识到这个问题,在VC6之后的版本中建立工程默认的都是UNICODE版),造成一些问题(比如在繁体中文系统中会出现乱码),记录一下ANSI版程序转换成UNICODE的基本方法和一些注意事项,以下内容为转载:
  1. 添加 UNICODE 和 _UNICODE 预处理定义
  注意一定要把UNICODE和_UNICODE 加上
  位置:Project Settings -> C/C++ -> Preprocessor definitions
  添加了这两个定义后,MFC的一些内置类型如 TCHAR、CString 都将转为支持宽字符类型(wchar_t)
  2. 将 Project Settings -> Link -> Output -> Entry Point 设为wWinMainCRTStartup
  否则会有如下错误:
  msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
  如果是console程序,则不用将入口点改为wWinMainCRTStartup,直接默认就行了
  3. 使用宽字符相关类型,如:
  char -> TCHAR、char * -> LPTSTR、const char * -> LPCTSTR
  4. 对字符串常量使用 _T() 宏
  5. 替换C库中的中字符串操作函数,如 strlen -> _tcslen、strcmp -> _tcscmp 等
  类似的还有C库中字符串与数字的转换函数,如 atoi -> _ttoi、itoa -> _itot 等
  6. C++标准库中的string,有对应的宽字符版本wstring,两者均为basic_string的特化版本
  可在StdAfx.h中:
  #ifdef _UNICODE
  #define tstring wstring
  #else
  #define tstring string
  #endif
  然后在代码中使用 tstring 即可,类似的还有 fstream/wfstream、ofstream/wofstream 等
  7. 宽字符版本的英文字符仍可直接与整型值进行比较,如:
  CString s = _T("ABC");
  ASSERT(s[0] == 'A');
  8. 对于仍需使用ANSI字符串的地方,如第三方类库的接口,仍可继续使用;如需进行Unicode字符串和ANSI字符串的互转换,可使用 MultiByteToWideChar 和 WideCharToMultiByte
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics