我正在尝试将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();
}

这会打印0,这比我希望的要少。进行此转换的正确方法是什么?

最佳答案

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

BSTR bstr = SysAllocString(pwsz);

// ...

SysFreeString(bstr);
BSTR是托管字符串,字符串的字符以其长度为前缀。 SysAllocString分配正确的存储量,并正确设置字符串的长度和内容。正确初始化BSTR后,SysStringLen应该返回正确的长度。

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

关于c++ - C++:将wchar_t *转换为BSTR?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3323177/

10-13 07:01