【发布时间】:2010-10-26 17:54:17
【问题描述】:
假设来自 COM 接口的方法返回 BSTR 值。我认为我必须释放它是对的吗?
http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx 的代码示例没有这样做。
谁错了?
【问题讨论】:
假设来自 COM 接口的方法返回 BSTR 值。我认为我必须释放它是对的吗?
http://msdn.microsoft.com/en-us/library/aa365382(VS.85).aspx 的代码示例没有这样做。
谁错了?
【问题讨论】:
Tony 是正确的,但我想扩展他的答案。这种情况不仅限于 BSTR。调用者负责释放通过 out 或 in/out 参数返回的任何内存。
【讨论】:
MSDN 示例错误。调用者释放和输入/输出 bstrs。如果它是输入/输出,则必须传入 null 或有效的 bstr。如果只是out,就不用初始化了。
从 msdn 的com allocation rules 中不是很清楚,但是客户端存根分配内存在 out 值上,所以从调用者的角度来看,服务器这样做了。除了调用者还有谁可以释放它?
【讨论】:
_bstr_t而不是直接跟BSTR打交道很方便。