创建 BSTR
时(使用 _bstr_t
作为包装类)我必须使用一些 constructors of _bstr_t
.由于 BSTR
是可能包含空字符的长度前缀字符串,因此必须有可能使用 native 字符串创建这样的字符串,而不依赖于给定 native 字符串的空终止符。
举个例子:
wchar_t* pwNativeString = L"abc\0def\0\0ghi\0\0\0"; // + automatic "\0"
// Now I want to create a BSTR using _bstr_t by this string.
_bstr_t spBSTR = _bstr_t(pwNativeString);
问题在于构造函数依赖于 pwNativeString
的空终止。所以生成的 BSTR
只是 "abc"
而已。所以我的问题是:如何创建 BSTR
或 _bstr_t
并将指针传递给具有特定长度的数组?在下面的伪-代码示例:
_bstr_t spBSTR = _bstr_t(pwNativeString, 15);
最佳答案
使用SysAllocStringLen
分配 BSTR
,然后使用双参数 _bstr_t
构造函数从中创建一个 _bstr_t
对象。如果将第二个参数设置为 true
,则需要调用 SysFreeString
之后。否则,_bstr_t
对象拥有该字符串并将为您释放它。
BSTR bstrIn = SysAllocStringLen(L"abc\0def\0\0ghi\0\0\0", 15);
_bstr_t spBSTR(bstrIn, false);
关于c++ - 在通过 native 字符串创建 BSTR(使用 _bstr_t 包装器)时,如何设置长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10726978/