我正在尝试将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/