我们有以下接口:COM服务器是否必须为[out]参数调用SysFreeString()?
[object, uuid("uuidhere"), dual ]
interface IInterface : IDispatch
{
[id(1), propget] HRESULT CoolProperty([out, retval] BSTR* result);
}
现在有一个小问题。一方面参数是“out”,所以任何值都可以作为输入传递,参数只有在成功返回时才有效。另一方面,有this MSDN article从许多页面链接到基本上说(最后一段),如果任何函数通过BSTR*
它必须释放字符串之前分配一个新的字符串。
这很可怕。如果这篇文章是正确的,这意味着所有的调用者都必须通过有效的BSTRs(可能是空BSTRs),否则BSTR传递可能会泄露。如果调用者传递了一个随机值并且被调用者试图调用SysFreeString()
它会遇到未定义的行为,因此约定很关键。
那么[out]
属性有什么意义呢?在这种情况下,[in, out]
和[out]
之间有什么区别?
该文章对不对?在分配新参数之前,我需要释放通过的BSTR [out]
参数吗?