由于是纯C,所以没使用mfc/atl,
请问如何将BSTR转换成char *

解决方案 »

  1.   

    WideCharToMultiByte好像是将“LPCWSTR”转换成“LPCSTR”,
    而BSTR=LPCWSTR吗?
    BSTR:头32位是长度,最后又以null结束;
    LPCWSTR:以null结束,(但没说头32位是长度);
    两者一样吗?
      

  2.   

    对啊!我忘记了
    BSTR bstr;
    wchar_t* buf;
    ...UINT l = SysStringLen(bstr);
    buf = new wchar_t(l + 1);
    memset(buf, 0, l + 1);
    memcpy(bstr + 2, buf, l);
    注:以上代码没有调试过
      

  3.   

    BSTR bstr;
    wchar_t* buf;
    ...UINT l = SysStringLen(bstr);
    buf = new wchar_t(l + 1);
    memset(buf, 0, l + 1);
    //刚才写反了
    memcpy(buf, bstr + 2, l);
    然后对buf用WideCharToMultiByte