IEnumString::next的资源管理协定是什么?



我正试图在IEnumString接口上实现一个迭代器。我很难弄清楚IEnumString::Next()方法的精确契约。

第二个参数记录如下:

rgelt

枚举项的数组。

枚举器负责分配任何内存,调用程序负责释放内存

让我困惑的是如何正确管理内存。显然,IEnumString实现分配了调用方被请求释放的内存。这似乎意味着OLESTR*的接收指向其所有权已转移到调用方的内存。

这就是解释文件的方式吗?如果是,应该使用哪个分配器来释放内存?

根据微软在Github上编写的这个示例,应该通过调用CoTaskMemFree来释放内存。

从第91行开始读取:

IFACEMETHODIMP CSampleSpellCheckProvider::InitializeWordlist(WORDLIST_TYPE wordlistType, _In_ IEnumString* words)
{
unsigned int type = wordlistType;
engine.ClearWordlist(type);
HRESULT hr = S_OK;
while (S_OK == hr)
{
LPOLESTR lpWord;
hr = words->Next(1, &lpWord, nullptr);
if (S_OK == hr)
{
hr = engine.AddWordToWordlist(type, lpWord);
CoTaskMemFree(lpWord);
}
}
return hr;
}

最新更新