Поделиться через


Управление памятью в MAPI

Область применения: Outlook 2013 | Outlook 2016

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

MAPIAllocateBuffer

MAPIAllocateMore

MAPIFreeBuffer

Когда клиенты и поставщики услуг используют эти функции, вопрос о том, кто "владеет" ( то есть знает, как освободить) конкретный блок памяти устраняется. Клиент, вызывающий метод поставщика услуг, не должен передавать буфер, достаточно большой для хранения возвращаемого значения любого размера. Поставщик услуг может просто выделить соответствующий объем памяти с помощью MAPIAllocateBuffer и, при необходимости, MAPIAllocateMore, а затем клиент может освободить его по желанию с помощью MAPIFreeBuffer, независимо от поставщика услуг.

Макросы памяти используются для выделения структур или массивов структур определенного размера. Клиенты и поставщики услуг должны использовать эти макросы, а не выделять память вручную. Например, если клиенту необходимо выполнить обработку разрешения имен в списке получателей с тремя записями, макрос SizedADRLIST можно использовать для создания структуры ADRLIST для передачи в IAddrBook::ResolveName с правильным количеством членов ADRENTRY . Все макросы памяти определяются в MAPIDEFS. Файл заголовка H. Ниже перечислены макросы.

Макрос Макрос
SizedADRLIST
SizedDtblPage
SizedDtblButton
SizedENTRYID
SizedDtblCheckBox
SizedSPropProblemArray
SizedDtblComboBox
SizedSPropTagArray
SizedDtblEdit
SizedSRowSet
SizedDtblGroupBox
SizedSSortOrderSet
SizedDtblLabel

MAPI также поддерживает использование COM-интерфейса IMalloc для управления памятью. Поставщики услуг получают указатель интерфейса IMalloc с помощью MAPI во время инициализации, а также могут получить его с помощью функции MAPIGetDefaultMalloc . Main преимущество использования методов IMalloc для управления памятью по сравнению с функциями MAPI заключается в том, что с помощью com-методов можно перераспределить существующий буфер. Функции памяти MAPI не поддерживают перераспределение.