Обработка памяти пользовательских изображений ленты надстроек Outlook

Я успешно создал и настроил свою надстройку Outlook в ATL.
Поскольку это нативная программа, написанная на c ++, я занимаюсь профилированием и охотой на утечки памяти. Я дважды проверил большую часть документации, и одна часть мне не понятна.

Кнопки в ленте и контекстном меню имеют функцию обратного вызова getImage, ожидающую IPictureDisp. У меня есть что-то вроде этого:

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 «вызывающий отвечает за вызов Release через этот указатель интерфейса, когда новый объект больше не нужен».

Нужно ли отслеживать этот указатель и использовать некоторые другие обратные вызовы, когда контекстное меню закрыто, и разблокировать его, или оно вызывается автоматически вызывающей стороной моего обратного вызова внутри?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]