Gerenciamento de memória no MAPI
Aplica-se a: Outlook 2013 | Outlook 2016
Saber como e quando alocar e memória gratuita é 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 forma consistente. As três funções são as seguintes:
Quando clientes e provedores de serviços usam essas funções, o problema de quem "possui" – ou seja, sabe como liberar – um bloco específico de memória é eliminado. Um cliente que chama um método de provedor de serviço não precisa passar um buffer grande o suficiente para manter 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 poderá liberá-la posteriormente 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 para passar para IAddrBook::ResolveName com o número correto de membros do ADRENTRY . Todas as macros de memória são definidas no MAPIDEFS. Arquivo de cabeçalho H. Essas macros são:
O MAPI também dá suporte ao uso da interface COM IMalloc para gerenciamento de memória. Os provedores de serviço recebem um ponteiro de interface IMalloc pelo MAPI no momento da inicialização e também podem recuperar um por meio da função MAPIGetDefaultMalloc . O main vantagem de usar os métodos IMalloc para gerenciar a memória nas 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.