我正在尝试转换wchar_t *
to 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);
A BSTR
是一个托管字符串,字符串的字符以其长度为前缀。SysAllocString
分配正确的存储量并正确设置字符串的长度和内容。随着BSTR
正确初始化,SysStringLen
应该返回正确的长度。
如果您使用 C++,您可能需要考虑使用 RAII 样式类(甚至是 Microsoft 的_bstr_t
)以确保您不会忘记任何SysFreeString
calls.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)