【问题标题】:Why we want to use BSTR为什么我们要使用 BSTR
【发布时间】:2014-06-22 19:01:54
【问题描述】:

我是 COM 新手。根据http://msdn.microsoft.com/en-us/library/windows/desktop/ms221069(v=vs.85).aspx BSTR 是一个带前缀的字符串。我想知道 BSTR 的目的是什么。在这种情况下我们必须使用 BSTR 而不是字符串类型?如果有人可以举个例子吗? 谢谢

【问题讨论】:

    标签: com bstr


    【解决方案1】:

    BSTR 在广泛的 API 家族中是 standard string type

    BSTR(基本字符串或二进制字符串)是 COM、自动化和互操作函数使用的字符串数据类型。在将从脚本访问的所有接口中使用 BSTR 数据类型。

    你在必要时使用BSTR,尤其是。当您使用的 API 期望您通过 BSTR 时;例如当某些 COM 接口方法需要 BSTR 参数时。当你有选择的时候,你可以使用BSTR 或其他任何东西。

    【讨论】:

      【解决方案2】:

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

      BSTR 也有这些有用的功能:

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

      【讨论】:

      • 如果您有此示例的代码示例,请:“这对于例如您传递现有字符串的情况非常有用,被调用者必须保留或重新分配它 - 没有单个堆和单组分配函数你很难做到这一点。”
      • @user454083: 任何带有“in-out”参数的情况——被调用者可以保持传递的参数不变或设置一个新值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2016-02-01
      • 2021-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多