我在ATL中成功创建并自定义了Outlook加载项。 由于这是一个用c ++编写的本机程序,我正在分析并寻找内存泄漏。我仔细检查了大部分文档,其中一部分对我来说并不清楚。
功能区和上下文菜单上的按钮具有期望IPictureDisp的getImage回调。我有这样的事情:
Gdiplus::Bitmap m_gdibmp;
...
STDMETHODIMP CConnect::GetButtonImage(IDispatch* ribbon, IPictureDisp** picture)
{
if (!picture)
return E_POINTER;
else
{
PICTDESC pictureDesc;
::ZeroMemory(&pictureDesc, sizeof(pictureDesc));
pictureDesc.cbSizeofstruct = sizeof(pictureDesc);
pictureDesc.picType = PICTYPE_BITMAP;
m_gdibmp->GetHBITMAP(NULL, &pictureDesc.bmp.hbitmap);
CComPtr<IPictureDisp> pIcon;
OleCreatePictureIndirect(&pictureDesc, IID_IPictureDisp, TRUE, (void**)&pIcon);
*picture = pIcon.Detach();
}
return S_OK;
}
根据MSDN OleCreatePictureIndirect&#34;当不再需要新对象时,调用者负责通过此接口指针调用Release&#34;。
当关闭上下文菜单并释放它时,是否必须跟踪此指针并使用其他一些回调,或者是否由内部回调的调用者自动释放?