C++:将wchar_t*转换为BSTR?

Nic*_*ner 5 c++ string com bstr

我正在尝试将a转换wchar_t *BSTR.

#include <iostream>
#include <atlstr.h>

using namespace std;

int main()
{
    wchar_t* pwsz = L"foo"; 

    BSTR bstr(pwsz);

    cout << SysStringLen(bstr) << endl;

    getchar();
}
Run Code Online (Sandbox Code Playgroud)

这打印0,比我希望的要少.这种转换的正确方法是什么?

CB *_*ley 9

您需要使用SysAllocString(然后使用SysFreeString).

BSTR bstr = SysAllocString(pwsz);

// ...

SysFreeString(bstr);
Run Code Online (Sandbox Code Playgroud)

A BSTR是一个托管字符串,其字符串的前缀是其长度.SysAllocString分配正确的存储量并正确设置字符串的长度和内容.有了BSTR正确的初始化,SysStringLen应返回正确的长度.

如果您正在使用C++,您可能需要考虑使用RAII样式类(甚至是Microsoft _bstr_t)以确保您不会忘记任何SysFreeString调用.