vs2008异常 OLE2AUnicode宏转换不正确,请大家指教一下

Jacky_Dai 2009-10-21 04:52:10
首先请大家看看这段代码

char szANSIString [MAX_PATH];
USES_CONVERSION; // 声明这个宏要使用的局部变量

LPSTR ptr;
wchar_t *wszSomeString = L"中国苏州";

lstrcpyA ( szANSIString, OLE2A(wszSomeString) );


从这段代码的表面看来是没有什么问题的,但是我却偏偏遇到了奇怪的问题,那就是OLE2A在
VS2008编译器下面将所有的Unicode转换成了"????"ANSI编码,百思不得其解,请高手一起看一下!

1 这段代买在VC6.0的环境下,运行正常,
Unicode:2D 4E FD 56 CF 82 DE 5D -N齎蟼轢
ANSI:D6 D0 B9 FA CB D5 D6 DD 中国苏州

2 VS2005的环境下的结果和VC6.0一致;


3 在VS2008的环境下,
Unicode:2D 4E FD 56 CF 82 DE 5D -N齎蟼轢
ANSI:3F 3F 3F 3F ????
...全文
157 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ToperRay 2009-10-22
  • 打赏
  • 举报
回复
感觉是没有设置区域的问题。
Jacky_Dai 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 muzizongheng 的回复:]
你用的是Unicode吗? 
[/Quote]
of course,问题比较难以理解
Jacky_Dai 2009-10-22
  • 打赏
  • 举报
回复
用CW2A也还是不行,我问题的关键点式在与这个宏为什么出错了,我用WideCharToMultiByte()函数最后替换掉,问题解决了,但是OLE2A为什么就不行了呢? 值得思考的问题
muzizongheng 2009-10-22
  • 打赏
  • 举报
回复
你用的是Unicode吗? 
Jacky_Dai 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 akirya 的回复:]
先调用 setlocale( LC_ALL, "chs" );试试看
[/Quote]
hi akirya,
你的方法我试了一下,还是不行,你那边有VS2008环境吗? 你可以调试一下看看,很奇怪的问题
muzizongheng 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jacky_dai 的回复:]
引用 11 楼 akirya 的回复:
那就很奇怪了

我就用这个代码,输出的都是正常的.不管工程使用unicode还是不使用unicode

C/C++ code#include <windows.h>
#include <AtlConv.h>int _tmain(int argc, _TCHAR* argv[])
{char szANSIString [MAX_PATH];
    USES_CONVERSION;// 声明这个宏要使用的局部变量    wchar_t*wszSomeString= L"中国苏州";
    lstrcpyA ( szANSIString, OLE2A(wszSomeString) );

我的vista_sp2 + vs2008, 没有问题.
    printf("%s\n" , szANSIString );return0;
}


    谢谢你的关注,VS2008是XP-ENG-SP3,我的NB的是XP-CHS,我把我
NB VC6.0编译好的exe放到工作机器上,运行出来的也是OK的,可以排除环境的
问题,

  那么你建立工程的时候有没有做什么特殊的设置呢? 奇怪中......
[/Quote]
Jacky_Dai 2009-10-22
  • 打赏
  • 举报
回复
还有没有亲手试验过的呢?
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 jacky_dai 的回复:]
引用 11 楼 akirya 的回复:
那就很奇怪了

我就用这个代码,输出的都是正常的.不管工程使用unicode还是不使用unicode

C/C++ code#include <windows.h>
#include <AtlConv.h>int _tmain(int argc, _TCHAR* argv[])
{char szANSIString [MAX_PATH];
    USES_CONVERSION;// 声明这个宏要使用的局部变量    wchar_t*wszSomeString= L"中国苏州";
    lstrcpyA ( szANSIString, OLE2A(wszSomeString) );
    printf("%s\n" , szANSIString );return0;
}


    谢谢你的关注,VS2008是XP-ENG-SP3,我的NB的是XP-CHS,我把我
NB VC6.0编译好的exe放到工作机器上,运行出来的也是OK的,可以排除环境的
问题,

  那么你建立工程的时候有没有做什么特殊的设置呢? 奇怪中......
[/Quote]
没有,使用默认的选项
lanseshenhua 2009-10-22
  • 打赏
  • 举报
回复
Unicode是比较麻烦。在这点上,VC就没有C#好。
Jacky_Dai 2009-10-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 akirya 的回复:]
那就很奇怪了

我就用这个代码,输出的都是正常的.不管工程使用unicode还是不使用unicode

C/C++ code#include<windows.h>
#include<AtlConv.h>int _tmain(int argc, _TCHAR* argv[])
{char szANSIString [MAX_PATH];
USES_CONVERSION;// 声明这个宏要使用的局部变量 wchar_t*wszSomeString= L"中国苏州";
lstrcpyA ( szANSIString, OLE2A(wszSomeString) );
printf("%s\n" , szANSIString );return0;
}

[/Quote]
谢谢你的关注,VS2008是XP-ENG-SP3,我的NB的是XP-CHS,我把我
NB VC6.0编译好的exe放到工作机器上,运行出来的也是OK的,可以排除环境的
问题,

那么你建立工程的时候有没有做什么特殊的设置呢? 奇怪中......
muzizongheng 2009-10-22
  • 打赏
  • 举报
回复
我的程序也是正常的啊. 汗
  • 打赏
  • 举报
回复
那就很奇怪了

我就用这个代码,输出的都是正常的.不管工程使用unicode还是不使用unicode

#include <windows.h>
#include <AtlConv.h>

int _tmain(int argc, _TCHAR* argv[])
{
char szANSIString [MAX_PATH];
USES_CONVERSION; // 声明这个宏要使用的局部变量
wchar_t *wszSomeString = L"中国苏州";
lstrcpyA ( szANSIString, OLE2A(wszSomeString) );
printf("%s\n" , szANSIString );
return 0;
}

  • 打赏
  • 举报
回复
先调用 setlocale( LC_ALL, "chs" );试试看
MoXiaoRab 2009-10-21
  • 打赏
  • 举报
回复

int SHUnicodeToAnsi( LPCWSTR pwszSrc,
LPSTR pszDst,
int cchBuf
);
雪影 2009-10-21
  • 打赏
  • 举报
回复
使用CW2A或CT2A试一试
WaistCoat13 2009-10-21
  • 打赏
  • 举报
回复
用CW2A
muzizongheng 2009-10-21
  • 打赏
  • 举报
回复
W2A宏试试.
最后f11进去看看, 是不是越界了什么的? lstrcpyA ( szANSIString, OLE2A(wszSomeString) );

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧