【发布时间】:2011-11-03 23:29:33
【问题描述】:
我有一些关于 COM 内存管理的问题:
-
我有一个 COM 方法:
STDMETHODIMP CWhitelistPolicy::GetWebsitesStrings(SAFEARRAY** 结果)
结果 = SAFEARRAY(BSTR)。如果我从另一个接口方法收到另一个 SAFEARRAY(BSTR)(为了设置 *result),我是否必须复制收到的字符串以便将它们传递给 *result 和外部客户端?或者考虑到我不会自己使用这些字符串,我可以将它们传递给客户(并传递所有权)?
2.
STDMETHODIMP CWhitelistPolicy::SetWebsitesStrings(SAFEARRAY* input)
在这里,我收到一个 BSTR 数组作为输入。我的方法再次负责输入中分配的内存?
3.
STDMETHOD(SetUsers)(SAFEARRAY* input);
在这里,我在另一个接口 (SetUsers) 上调用一个方法,并为输入 SAFEARRAY 分配内存。在我调用 SetUsers 之后,我可以处理 SAFEARRAY 吗?当编组发生时,内存总是被复制,不是吗? (在我的例子中,SetUsers 方法是在我的进程内作为 COM DLL 托管的接口上调用的)
【问题讨论】:
标签: memory-management com