Unicode转换成ANSI,使用WideCharToMultiByte,我做了下面的转换后,怎么会出现问题呀
高手们看下先:WCHAR* m_Wch;
.
.
.//取得m_Wch的内容char* m_Sch;
WideCharToMultiByte(
    CP_ACP,
    WC_COMPOSIONCHECK | WC_DEFAULTCHAR,
    m_Wch,
    0,      //换成其他的都无法转换,疑惑中
    m_Sch,
    0,      //同上
    NULL,NULL);CString m_strTest; //如果在WideCharToMultiByte前定义该字符串的话,转换不成功?!
m_strTest.Format("%s",m_Sch);到底是什么原因,应该如何改呀

解决方案 »

  1.   

    用_b_str作桥梁进行相互转换似乎方便些
      

  2.   

    一 确保WideCharToMultiByte调用时m_Wch的内容。我看不到你有没有分配空间或者指向一个合法的UNICODE字符串二 m_Sch必须指向一块足够大的空间,所以必须调用WideCharToMultiByte两次,第一次调用WideCharToMultiByte,其中cbMultiByte为0,WideCharToMultiByte返回m_Sch指向的空间的大小。你给m_Sch分配空间以后第二次调用WideCharToMultiByte,cbMultiByte设为前一次的返回值才能获得你想要的ANSI字符串
      

  3.   

    还有,参数cchWideChar应该是Unicode字符串的长度,如果想让Windows自动检测长度,应该传值-1而不是0。附,WideCharToMultiByte的函数原型
    int WideCharToMultiByte(
      UINT CodePage, 
      DWORD dwFlags, 
      LPCWSTR lpWideCharStr, 
      int cchWideChar, 
      LPSTR lpMultiByteStr, 
      int cbMultiByte, 
      LPCSTR lpDefaultChar, 
      LPBOOL lpUsedDefaultChar 
    );
      

  4.   

    还有,参数cchWideChar应该是Unicode字符串的长度,如果想让Windows自动检测长度,应该传值-1而不是0。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    -1也是不行
    主要是转换可以成功,对转换后的字符串进行比较的时候就会出问题,这个时候转换数据为空
      

  5.   

    好像是读取的Unicode字符并没有保存在分配空间内,而是作为暂存,有确定比较对象的时候就会被覆盖掉,不知道甚么原因