【问题标题】:Who owns returned BSTR?谁拥有返回的 BSTR?
【发布时间】:2010-10-26 17:54:17
【问题描述】:

假设来自 COM 接口的方法返回 BSTR 值。我认为我必须释放它是对的吗?

http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx 的代码示例没有这样做。

谁错了?

【问题讨论】:

    标签: com bstr


    【解决方案1】:

    Tony 是正确的,但我想扩展他的答案。这种情况不仅限于 BSTR。调用者负责释放通过 out 或 in/out 参数返回的任何内存。

    【讨论】:

      【解决方案2】:

      MSDN 示例错误。调用者释放和输入/输出 bstrs。如果它是输入/输出,则必须传入 null 或有效的 bstr。如果只是out,就不用初始化了。

      从 msdn 的com allocation rules 中不是很清楚,但是客户端存根分配内存在 out 值上,所以从调用者的角度来看,服务器这样做了。除了调用者还有谁可以释放它?

      【讨论】:

      • 我一直觉得用_bstr_t而不是直接跟BSTR打交道很方便。
      • 是的,但并不是每个人都愿意坚持使用 Visual Studio。
      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多