这两天,接手别人的一个VC程序,要求在中文,英文,繁体系统下都能正常运行,并且在不同系统下显示不同的语言。
最近就遇到一个很棘手的问题,和之前在英文系统下的差不多,只是这次更离谱,上次是英文系统下的默认编码导致取中文首拼错误;
现在是在繁体系统下,开启工具就会中断异常,报堆栈不平衡,DLL所致。
经多次跟踪,找到时 LeaveCriticalSection 函数这里,跳出的异常中断。
此处的代码,大致为下面这种形式(下面为转载的):
用LCMapString实现GB2312繁体到简体的转化
char szText [256] = "" ;
WORD wLanguageID = MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED) ;
LCID Locale = MAKELCID( wLanguageID, SORT_CHINESE_PRC ) ;
LCMapString( Locale, LCMAP_SIMPLIFIED_CHINESE, "測試", -1, szText, 256 ) ;
后来找了很多地方,有网上的资料说是要设置多线程编译:
project->settings,选择C/C++,CateGory选择Code Generation,下面的Use run-time library选择多线程,再编译运行试试看。
还是不行。
后来,发现,还是繁体系统下的编码和我中文的操作系统大不一样所致。
于是我把项目丢到繁体操作系统下进行编译,并修改常数参量(很重要),即可正常在中文,英文,繁体三种操作系统下正常运行了。