Управление памятью в MAPI
Область применения: Outlook 2013 | Outlook 2016
Знание того, как и когда выделять и освобождать память является важной частью программирования с помощью MAPI. MAPI предоставляет функции и макросы, которые клиент или поставщик услуг может использовать для согласованного управления памятью. Ниже перечислены три функции.
Когда клиенты и поставщики услуг используют эти функции, вопрос о том, кто "владеет" ( то есть знает, как освободить) конкретный блок памяти устраняется. Клиент, вызывающий метод поставщика услуг, не должен передавать буфер, достаточно большой для хранения возвращаемого значения любого размера. Поставщик услуг может просто выделить соответствующий объем памяти с помощью MAPIAllocateBuffer и, при необходимости, MAPIAllocateMore, а затем клиент может освободить его по желанию с помощью MAPIFreeBuffer, независимо от поставщика услуг.
Макросы памяти используются для выделения структур или массивов структур определенного размера. Клиенты и поставщики услуг должны использовать эти макросы, а не выделять память вручную. Например, если клиенту необходимо выполнить обработку разрешения имен в списке получателей с тремя записями, макрос SizedADRLIST можно использовать для создания структуры ADRLIST для передачи в IAddrBook::ResolveName с правильным количеством членов ADRENTRY . Все макросы памяти определяются в MAPIDEFS. Файл заголовка H. Ниже перечислены макросы.
MAPI также поддерживает использование COM-интерфейса IMalloc для управления памятью. Поставщики услуг получают указатель интерфейса IMalloc с помощью MAPI во время инициализации, а также могут получить его с помощью функции MAPIGetDefaultMalloc . Main преимущество использования методов IMalloc для управления памятью по сравнению с функциями MAPI заключается в том, что с помощью com-методов можно перераспределить существующий буфер. Функции памяти MAPI не поддерживают перераспределение.