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,比我希望的要少.这种转换的正确方法是什么?
您需要使用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调用.