CString text= "12343";
BSTR bstrText =text.AllocSysString();
text.Format("%s",(char *)bstrText);
::AfxMessageBox(text);为什么 text变成 "1"了??只取到第一个字符 
因为上面的 出问题了~~转化时只转了第一个字符~~~~

解决方案 »

  1.   

    CString text= L"12343";默认情况下text是ascii的,而BSTR是宽字符的,即1和2之间有0x0,而0是字符串的结束符。
      

  2.   

    CString text= L"12343"; 语法有错哦,
    CString text( L"12343");这样编译可以通过,
    不过不行啊,还是只认到第一个字符◎~~~
    好郁闷~
      

  3.   

    ::MessageBoxW( 0 , text, 0 , 0);用这个输出
      

  4.   

    text.Format("%s",(char *)bstrText);?
      

  5.   


    USES_CONVERSION;
    text=OLE2T(bstrText);
      

  6.   

    (char *)bstrText这种用法就是不对的,这正是C语言的传统弊病——任意的强制转换!你上面的强制转换只是通过了编辑,运行的时候肯定得不到你想要的结果。宽字符就应该用宽字符函数来操作,比如你的bstrText,用wsprintf来打印才对。像AfxMessageBox这些函数,看起来只有一个版,去可以操作两种字符,其实不然,这是因为MFC在后台使用的宏操作,其实根本就没有AfxMessageBox这个函数,只有AfxMessageBoxA和AfxMessageBoxW,是宏的运用让AfxMessageBox在编译的时候动态的变成了AfxMessageBoxA或AfxMessageBoxW
      

  7.   

    谢谢 yang79tao() 的指教~
    能不能对 这些数据类型给点学习的方向呢,我不知道从哪里入手~
    现在要写ATL自动化接口,只能传像BSTR这类的 数据类型,又一直出现这样的情况,都不知道怎么办好~
      

  8.   

    CString text= "12343";
    BSTR bstrText =text.AllocSysString();
    text = W2A(bstrText);
      

  9.   

    转化过程是对的,不过输出是错的,bstrText中已经是BSTR了。
      

  10.   

    上面我不是说过了吗?宽字符要么用支持宽字符的函数,要么进行转换,ATL下有一堆宏用于这种转换,比如楼上说的W2A,这个ATL或COM书上肯定都会介绍的。
      

  11.   

    wlwlxj(wlwlxj)  
     ---------------------
       CString text= "12343";
    BSTR bstrText =text.AllocSysString();
    text = W2A(bstrText);
    --------------------
    这个转化函数可以,,谢谢啦~~
      
     
      

  12.   

    或者用text = CString(bstrText);这样也行