程序如下
BSTR bstr1 = NULL;  
bstr1 = SysAllocString( L"张三");
这样是对的
L"张三" 用了4个字节我知道这样写不对,因为wcstrBuffer用了8个字节,那应该怎样写,请高手赐教,谢谢
wchar_t wcstrBuffer[4];
char szTemp[] = "张三"
mbstowcs(wcstrBuffer, szTemp, 4);
BSTR bstr1 = NULL;  
bstr1 = SysAllocString(wcstrBuffer);

解决方案 »

  1.   

    wchar_t wcstrBuffer[4];
    char szTemp[] = "张三"
    mbstowcs(wcstrBuffer, szTemp, sizeof(szTemp));
    BSTR bstr1 = NULL;  
    bstr1 = SysAllocString(wcstrBuffer);
      

  2.   

    也可以这样:
    mbstowcs(wcstrBuffer, szTemp, MB_CUR_MAX );
    msdn里的例子就是这么用的,函数在到达MB_CUR_MAX或者遇到字符\0时就会返回
      

  3.   

    还是这种方法比较方便:
    _bstr_t sz = L"张三";
    BSTR bstr = sz.copy();
      

  4.   

    这样也可以:
    TCHAR szTemp[]="张三“;
    BSTR  bstrl=NULL;
    bstrl=_com_util::ConvertStringToBSTR(szTemp);
      

  5.   

    用CComBSTR或者_bstr_t吧,这两个都是BSTR的wrapper,很好用,也不用你来考虑内存释放问题,我一贯用的都是CComBSTR
      

  6.   

    我建议你看一下Unicode这一块
    就可以知道Unicode同ANSI字符串的区别