谁拥有返回的BSTR?

时间:2009-05-16 16:51:41

标签: com bstr

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

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

谁错了?

2 个答案:

答案 0 :(得分:11)

MSDN示例错误。呼叫者释放和进出bstrs。如果它是in / out你必须传入null或有效的bstr。如果它只是外出,则不必初始化。

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

答案 1 :(得分:9)

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