创建BSTR
(使用_bstr_t
作为包装类)时,我必须使用constructors of _bstr_t
中的一些。由于BSTR
是一个可能包含空字符的长度前缀字符串,因此必须有可能使用本机字符串创建此类字符串,而不依赖于给定本机字符串的空终止。
举个例子:
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);
答案 0 :(得分:3)
使用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);