1

创建BSTR(用作包装类)时,_bstr_t我必须使用. _bstr_t由于 aBSTR是可能包含空字符的长度前缀字符串,因此必须有可能使用本地字符串创建这样的字符串,而不依赖于给定本地字符串的空终止。

举个例子:

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);
4

1 回答 1

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);
于 2012-05-23T20:08:39.310 回答