c++ - 在通过 native 字符串创建 BSTR(使用 _bstr_t 包装器)时,如何设置长度?

标签 c++ string com bstr null-terminated

创建 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/

相关文章:

c++ - 列表框属性值未出现在 C++ 自定义操作 Wix 中?

python - 如何通过用户输入创建一个字符串数组并在 Python 中按字典顺序打印它们?

.net - COM 和 .NET 有什么区别?

vba - VBA COM 库中的这些 _B_var_Xxxxx 和 _B_str_Xxxxx 成员究竟是什么?

c++ - 将 Microsoft COM IDL 编译/翻译为地道的 C++?

c++ - 我可以将 move 的变量标记为不再可用,并在使用它时收到编译器警告吗?

c++ - C++ Actor 系统的消息接收

c - 如何区分 malloced 字符串和字符串文字?

python - 编辑两个 Pandas 列之间的距离

php - 从 javascript/php 在服务器上运行 VBScript