Compartilhar via


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.

Confira também

IMAPISupport::GetMemAllocRoutines