在使用本机字符串创建BSTR(使用_bstr_t包装器)时,如何设置长度?

时间:2012-05-23 20:00:04

标签: c++ string com bstr null-terminated

创建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);

1 个答案:

答案 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);