管理 MAPI 中的内存

适用于:Outlook 2013 | Outlook 2016

了解如何以及何时分配和释放内存是使用 MAPI 进行编程的一个重要部分。 MAPI 提供函数和宏,客户端或服务提供商可以使用这些函数和宏以一致的方式管理内存。 这三个函数如下所示:

MAPIAllocateBuffer

MAPIAllocateMore

MAPIFreeBuffer

当客户端和服务提供商使用这些函数时,将消除“谁拥有”的问题(即知道如何释放)特定的内存块。 调用服务提供程序方法的客户端不需要传递足够大的缓冲区来容纳任何大小的返回值。 服务提供商只需使用 MAPIAllocateBuffer 分配适当的内存量,如有必要, MAPIAllocateMore,客户端稍后可以使用 MAPIFreeBuffer(独立于服务提供程序)来释放内存。

内存宏用于分配特定大小的结构或结构数组。 客户端和服务提供商应使用这些宏,而不是手动分配内存。 例如,如果客户端需要对包含三个条目的收件人列表执行名称解析处理,则可以使用 SizedADRLIST 宏创建 ADRLIST 结构,以传递给具有正确数量的 ADRENTRY 成员的 IAddrBook::ResolveName。 所有内存宏都在 MAPIDEFS 中定义。H 头文件。 这些宏包括:

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

MAPI 还支持使用 COM 接口 IMalloc 进行内存管理。 服务提供程序在初始化时由 MAPI 提供 IMalloc 接口指针,还可以通过 MAPIGetDefaultMalloc 函数检索一个。 使用 IMalloc 方法管理 MAPI 函数上的内存的main优势是,使用 COM 方法可以重新分配现有缓冲区。 MAPI 内存函数不支持重新分配。