今天用UNICODE编译了BCGSoft.BCGControlBar.Professional.v6.74类库和示例程序BCGControls,运行发现日历控件CBCGPCalenderBar对于中文信息“星期×”、“×月”显示为乱码。开始我以为编译的有问题,重新检查后没有发现异常。然后我进入调试状态,跟踪错误信息发现是BCGPCalenderBar.cpp (Line 57)
BCGPDateTimeCtrl.cpp (Line 996)调用COleDateTime.Format时返回的字符串有问题,继续跟踪进入MFC的源代码,发现在调用mbstowcs时,将ANSI字符串转换为UNICODE字符串时出现问题,具体来说:无论对于英文字符或者数字这种单字节字符,还是汉字这些双字节字符,统统看作单字节字符,然后转换成UNICODE字符串!“星期一”在内存中是D0 C7 C6 DA D2 BB 00
转换后变成了D0 00 C7 00 C6 00 DA 00 D2 00 BB 00 00这样让我很迷惑,好歹写了几年的程序了,还从来没有碰到过这种事儿,难道真是微软MFC的Bug,又如何解决呢?我发现用_MBCS代替_UNICODE进行编译,运行结果一切正常,但我希望用_UNICODE编译啊……
BCGPDateTimeCtrl.cpp (Line 996)调用COleDateTime.Format时返回的字符串有问题,继续跟踪进入MFC的源代码,发现在调用mbstowcs时,将ANSI字符串转换为UNICODE字符串时出现问题,具体来说:无论对于英文字符或者数字这种单字节字符,还是汉字这些双字节字符,统统看作单字节字符,然后转换成UNICODE字符串!“星期一”在内存中是D0 C7 C6 DA D2 BB 00
转换后变成了D0 00 C7 00 C6 00 DA 00 D2 00 BB 00 00这样让我很迷惑,好歹写了几年的程序了,还从来没有碰到过这种事儿,难道真是微软MFC的Bug,又如何解决呢?我发现用_MBCS代替_UNICODE进行编译,运行结果一切正常,但我希望用_UNICODE编译啊……
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货