我们为什么要使用BSTR

时间:2014-05-06 08:51:06

标签: com bstr

我是COM的新手。根据{{​​3}} BSTR是带前缀的字符串。我想知道BSTR的目的是什么。在这种情况下,我们必须使用BSTR而不是字符串类型?如果有人可以举个例子吗? 谢谢

2 个答案:

答案 0 :(得分:2)

广泛的API系列中

BSTRstandard string type

  

BSTR(基本字符串或二进制字符串)是COM,Automation和Interop函数使用的字符串数据类型。在将从脚本访问的所有接口中使用BSTR数据类型。

您必须使用BSTR,尤其是当您使用的API期望您通过BSTR;例如当某些COM接口方法需要BSTR参数时。当您有选择时,您可以自行决定使用BSTR或其他任何内容。

答案 1 :(得分:2)

首先,有时你必须使用BSTR。例如,如果您调用COM方法并且被调用者期望BSTR您不想传递任何其他字符串类型 - 否则他们可能会调用SysStringLen()并遇到未定义的行为。当API描述显示您应该使用BSTR时使用BSTR。

同样BSTR具有以下有用功能:

  • (最重要的是)它被分配在由COM管理的单独堆上,因此如果您的应用程序由使用不同运行时堆的不同模块组成,则任何模块都可以分配BSTR,然后任何模块都可以轻松地释放它而不是与其他动态分配的东西的情况。这对于例如传递现有字符串,被调用者必须保留或重新分配它的情况非常有用 - 没有单个堆和单个分配函数集你很难做到这一点。
  • (不太重要)它受Automation marshaller的支持,所以你可以很容易地在必须编组的COM接口中使用它,而不是打扰制作和注册代理存根的东西
  • (最不重要的IMO)它可以包含与其他典型字符串类型不同的嵌入空字符