随笔-3  评论-4  文章-0  trackbacks-0
以前VC6的代码,从xml文件中读取属性文字(中文),返回BSTR类型,用OLE2T转换,然后显示,一直工作很正常,用来做本地化,比修改Res文件要方便的多。

同样的代码,在VS2003里面居然不能工作了,调试,发现BSTR返回正常,而通过OLE2T转换居然就全转成“???”了,晕。

做了无数尝试,发现用unicode编译就正常。可是原来的VC6项目不论是否Unicode编译都正常的,要把一个项目全部转成Unicode还是有相当工作量的,似乎也并没有必要。

寻找解决方法,看了一堆ATL的代码,ATL7提供了OLE2T的代替品COLE2T,用一个重载是COLE2T(bstr, codepage),发现给把第二个参数设置成CP_ACP,即ANSI code page就转换正常了。原来是codepage的问题,ATL搞了一大堆代码来获取转换用的codepage,看得人晕,而我要的只是ANSI code page。

继续找,终于找到了,ATL的代码通过一条宏定义进行了分支。如果定义了宏_CONVERSION_DONT_USE_THREAD_LOCALE,则对当前code page的请求简单返回CP_ACP,否则,就搞了一大堆代码从当前线程中查询。那么我们要做的就是定义这个宏就可以了。试了一下,果然如此

最终解决方案,在stdafx.h的所有包含文件前面加上:
#define _CONVERSION_DONT_USE_THREAD_LOCALE


搞定
posted on 2005-11-10 09:43 章鱼 阅读(985) 评论(1)  编辑 收藏 引用

评论:
# re: OLE2T在VS2003中转换中文失败的问题及解决方法 2005-11-11 22:22 | nilaozi


一个在blogjava失去家园的人声讨。
除了政治原因可以删了一个人blog,别的理由都不能成为理由。
我为每个都到他们所需的ebook难道错了,
贴到首页,我还以你们有预申机制,CSDN是这样,管理员认为可以才放到首页。
不信你到他们的首页看看。
http://csdn.blog.net/ahhoo
如果你认为还不错的,请到回贴。
  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理