MAPIFreeBuffer
Aplica-se a: Outlook 2013 | Outlook 2016
Libera um buffer de memória alocado com uma chamada para a função MAPIAllocateBuffer ou a função MAPIAllocateMore .
Propriedade | Valor |
---|---|
Arquivo de cabeçalho: |
Mapix.h |
Implementado por: |
MAPI |
Chamado por: |
Aplicativos cliente e provedores de serviços |
ULONG MAPIFreeBuffer(
LPVOID lpBuffer
);
Parâmetros
Lpbuffer
[in] Ponteiro para um buffer de memória alocado anteriormente. Se NULL for passado no parâmetro lpBuffer , MAPIFreeBuffer não fará nada.
Valor de retorno
S_OK
A chamada foi bem-sucedida e liberou a memória solicitada. MAPIFreeBuffer também pode retornar S_OK em locais já liberados ou se o bloco de memória não estiver alocado com MAPIAllocateBuffer e MAPIAllocateMore.
Comentários
Normalmente, quando um aplicativo cliente ou provedor de serviços chama MAPIAllocateBuffer ou MAPIAllocateMore, o sistema operacional constrói em um buffer de memória contíguo uma ou mais estruturas complexas com vários níveis de ponteiros. Quando uma função ou método MAPI cria um buffer com esse conteúdo, um cliente pode liberar posteriormente todas as estruturas contidas no buffer passando para MAPIFreeBuffer o ponteiro para o buffer retornado pela função MAPI que criou o buffer. Para que um provedor de serviços libere um buffer de memória usando MAPIFreeBuffer, ele deve passar o ponteiro para esse buffer retornado com o objeto de suporte do provedor.
A chamada para MAPIFreeBuffer para liberar um buffer específico deve ser feita assim que um cliente ou provedor for concluído usando esse buffer. Simplesmente chamar o método IMAPISession::Logoff no final de uma sessão MAPI não libera automaticamente buffers de memória.
Um cliente ou provedor de serviços deve operar na suposição de que o ponteiro passado em lpBuffer é inválido após um retorno bem-sucedido do MAPIFreeBuffer. Se o ponteiro indicar um bloco de memória não alocado pelo sistema de mensagens por meio de MAPIAllocateBuffer ou MAPIAllocateMore ou um bloco de memória gratuito, o comportamento de MAPIFreeBuffer será indefinido.
Observação
Passar um ponteiro nulo para MAPIFreeBuffer torna o código de limpeza do aplicativo mais simples e menor porque MAPIFreeBuffer pode inicializar ponteiros para NULL e liberá-los no código de limpeza sem precisar testá-los primeiro.