是否有 CComBSTR 的缓冲版本可以使字符串连接更有效?

Posted

技术标签:

【中文标题】是否有 CComBSTR 的缓冲版本可以使字符串连接更有效?【英文标题】:Is there a buffered version of CComBSTR that makes string concatenation more efficient? 【发布时间】:2010-09-13 11:40:36 【问题描述】:

我有几个项目需要将字符串附加到 BSTR/CComBSTR/_bstr_t 对象(例如构建动态 SQL 语句)。 WinAPI 中是否有开箱即用的类型来缓冲连接(如 .NET 中的 StringBuilder),还是我必须自己编写?根据我对附加方法的了解,它们执行重新分配。

【问题讨论】:

【参考方案1】:

将 BSTR 复制到 CString 中,在那里进行所有修改,然后将其复制回 BSTR/CComBSTR。 CString 的分配速度比 SysAllocStringLen 快。

【讨论】:

但是 CString 处理嵌入式 NUL 的方式与 BSTR 相同吗? 是的。 CString 可以很好地处理 NULL。【参考方案2】:

你必须自己写。您可以使用 SysAllocStringLen 或 SysReallocString API 来获取不同大小的缓冲区。它们作用于输入字符串,但您可以传递 NULL 来分配固定大小、未初始化的缓冲区。

【讨论】:

以上是关于是否有 CComBSTR 的缓冲版本可以使字符串连接更有效?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 CComBSTR 是不是以某个前缀开头?

ComBSTR 分配

我应该将CComBSTR比较为NULL

如何将字符串连接到刀片中的 $ 变量?

Spark - 将每个分区的字符串连接到单个字符串

oracle通过添加regexp_like将字符串连接到数字不起作用