我們有以下接口: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]
參數嗎?