Gerenciamento da memória no MAPI

Aplica-se a: Outlook 2013 | Outlook 2016

Saber como e quando alocar e liberar memória é uma parte importante da programação com MAPI. O MAPI fornece funções e macros que seu cliente ou provedor de serviços pode usar para gerenciar a memória de maneira consistente. As três funções são as seguintes:

MAPIAllocateBuffer

MAPIAllocateMore

MAPIFreeBuffer

Quando clientes e provedores de serviços usam essas funções, a questão de quem "possui" - isto é, sabe como liberar - um determinado bloco de memória é eliminado. Um cliente que chama um método de provedor de serviços não precisa passar um buffer grande o suficiente para conter um valor retornado de qualquer tamanho. O provedor de serviços pode simplesmente alocar a quantidade apropriada de memória usando MAPIAllocateBuffer e, se necessário, MAPIAllocateMore, e o cliente pode liberá-la posteriormente à vontade usando MAPIFreeBuffer, independente do provedor de serviços.

As macros de memória são usadas para alocar estruturas ou matrizes de estruturas de um tamanho específico. Clientes e provedores de serviços devem usar essas macros em vez de alocar a memória manualmente. Por exemplo, se um cliente precisar executar o processamento de resolução de nomes em uma lista de destinatários com três entradas, a macro SizedADRLIST poderá ser usada para criar uma estrutura ADRLIST a ser passada para IAddrBook::ResolveName com o número correto de membros ADRENTRY . Todas as macros de memória são definidas nos MAPIDEFS. arquivo de cabeçalho H. Essas macros são:

Macro Macro
SizedADRLIST
SizedDtblPage
SizedDtblButton
SizedENTRYID
SizedDtblCheckBox
SizedSPropProblemArray
SizedDtblComboBox
SizedSPropTagArray
SizedDtblEdit
SizedSRowSet
SizedDtblGroupBox
SizedSSortOrderSet
SizedDtblLabel

O MAPI também dá suporte ao uso da interface COM IMalloc para gerenciamento de memória. Os provedores de serviços recebem um ponteiro de interface IMalloc por MAPI no momento da inicialização e também podem recuperar um por meio da função MAPIGetDefaultMalloc . A principal vantagem de usar os métodos IMalloc para gerenciar memória sobre as funções MAPI é que, com os métodos COM, é possível realocar um buffer existente. As funções de memória MAPI não dão suporte à realocação.