假设来自 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不这样做。
谁错了?
MSDN 示例是错误的。调用者释放和输入/输出 bstrs。如果它是输入/输出,则必须传入 null 或有效的 bstr。如果它只是出来的,它不必被初始化。
从 msdn 的com 分配规则中不是很清楚,但是客户端存根在 out 值上分配内存,所以从调用者的角度来看,服务器这样做了。除了调用者,还有谁可以释放它?
托尼是正确的,但我想扩展他的答案。这种情况不仅限于 BSTR。调用者负责释放通过 out 或 in/out 参数返回的任何内存。