Compartir a través de


Administración de memoria en MAPI

Hace referencia a: Outlook 2013 | Outlook 2016

Saber cómo y cuándo asignar y liberar memoria es una parte importante de la programación con MAPI. MAPI proporciona funciones y macros que el cliente o proveedor de servicios puede usar para administrar la memoria de forma coherente. Las tres funciones son las siguientes:

MAPIAllocateBuffer

MAPIAllocateMore

MAPIFreeBuffer

Cuando los clientes y proveedores de servicios usan estas funciones, se elimina el problema de quién "posee" (es decir, sabe cómo liberar) un bloque de memoria determinado. Un cliente que llama a un método de proveedor de servicios no necesita pasar un búfer lo suficientemente grande como para contener un valor devuelto de cualquier tamaño. El proveedor de servicios simplemente puede asignar la cantidad adecuada de memoria mediante MAPIAllocateBuffer y, si es necesario, MAPIAllocateMore, y el cliente puede liberarla posteriormente a voluntad mediante MAPIFreeBuffer, independientemente del proveedor de servicios.

Las macros de memoria se usan para asignar estructuras o matrices de estructuras de un tamaño específico. Los clientes y proveedores de servicios deben usar estas macros en lugar de asignar la memoria manualmente. Por ejemplo, si un cliente necesita realizar el procesamiento de resolución de nombres en una lista de destinatarios con tres entradas, la macro SizedADRLIST se puede usar para crear una estructura ADRLIST para pasarla a IAddrBook::ResolveName con el número correcto de miembros ADRENTRY . Todas las macros de memoria se definen en MAPIDEFS. Archivo de encabezado H. Estas macros son:

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

MAPI también admite el uso de la interfaz COM IMalloc para la administración de memoria. MAPI proporciona a los proveedores de servicios un puntero de interfaz IMalloc en el momento de la inicialización y también se puede recuperar uno a través de la función MAPIGetDefaultMalloc . La principal ventaja de usar los métodos IMalloc para administrar la memoria sobre las funciones MAPI es que con los métodos COM es posible reasignar un búfer existente. Las funciones de memoria MAPI no admiten la reasignación.