#logo
PHOTO   GUESTBOOK

老的AlloSoft的论坛数据没有恢复过来,先转一些文章到BLOG上。
Former Posted URL: http://www.allosoft.com/bB2/viewtopic.php?f=6&t=41
Posted: 2005-04-10 16:01:32
by #fist
***************************************************************

最近尝试着在NT内核的系统下的Unicode编程(可支持多语言)。
打算把一些尝试性的经验陆续的整理出来。
以后的编程打算不考98的环境了,连M$自己都放弃了,估计再过两年98也不会太多吧...个人猜侧。

因为NT系统的内核是unicode,一般情况下通过VC创建的工程默认都是ansi代码(可以兼容win9x),在NT下ansi代码在调用windows API的时系统实际又进行了一次ansi到unicode的代码转化。所以如果程序不考虑win9x(早晚是明日黄花)的话,直接用unicode编译,那么代码的执行效率一定能提升不少,而且又可以支持多语言。
因为在VC中默认代码是以ASNI的,所以Unicode的编译还需要动动一些环境设置。
具体如下,

1、在vc编译选项上,在vc7.0以上在工程的属性页中的“字符集”选上"使用 Unicode 字符集"即可,在vc6.0下可能麻烦一点,得先把vc运行库的unicode版本复制到vc路径下,一般都是和xxx.lib的ansi对应xxxU.lib,默认装vc时是不会装的。
2、设置工程属性
1) 改语言定义:
在project settings的"C++"页中的"preprocessor definitions"中改_MBCS为_UNICODE
2) 改入口函数:
在"link"页中的"project Options"加入/entry:"wWinMainCRTStartup"即可.
3、宏的使用
在代码上,处理字符中的多用TCHAR.H中的宏,如strcpy用_tcscpy代替,用TCHAR代char,用TCHAR m_mystr[]=_T("xxxx")代替 char m_mystr[]="xxxx";
4、注意调试UNICODE程序时,需要在安装时VC选择所有选项,否则会缺少动态库和相应的.lib文件


经过上述设置的代码编写的过程以后,编译出来的程序就可以在不同的语言系统中都可以支持多种语言了。
如下图,我的系统是中文简体的,经过Unicode编译后,可以支持韩文了。



当然除了这些还有很多地方与一般ANSI的编写不同,
如,
SPRINTF->SWPRINTF,
LPSTR->LPCWSTR

详细的就不一一列出了。

其他补充:
还有一点就是我自己经尝范错误的,就是将Debug和Release的环境设置统一。
我自己经常会忘记把Release的环境设置与Debug的设置保持一致,所以经常出现Debug可以编译通过,Release时通不过的情况。

如果程序定义了_UNICODE宏直接用
WCHAR *str=L"unicodestring";
TextOut(0,0,str);

否则需要转换类型
#include <comdef.h>
WCHAR *str=L"unicodestring";
bstr_t str1=str;
TextOut(0,0,(char*)str1);
2008/04/10 01:01 2008/04/10 01:01
Tags for this entry
, , ,
#fist posted at 2008/04/10 01:01
No Trackback, No Comment

trackback url (click to copy):
http://fist.allosoft.com/tc/trackback/4