次の方法で共有


MAPI でのメモリの管理

適用対象: Outlook 2013 | Outlook 2016

メモリを割り当てて解放する方法とタイミングを知ることは、MAPI を使用したプログラミングの重要な部分です。 MAPI には、クライアントまたはサービス プロバイダーがメモリを一貫した方法で管理するために使用できる関数とマクロの両方が用意されています。 3 つの関数は次のとおりです。

MAPIAllocateBuffer

MAPIAllocateMore

MAPIFreeBuffer

クライアントとサービス プロバイダーがこれらの機能を使用する場合、誰が "所有" しているか、つまり、解放方法を知っているという問題は、特定のメモリ ブロックを排除します。 サービス プロバイダー メソッドを呼び出すクライアントは、任意のサイズの戻り値を保持するのに十分な大きさのバッファーを渡す必要はありません。 サービス プロバイダーは、 MAPIAllocateBuffer を使用して適切な量のメモリを割り当てるだけで、必要に応じて MAPIAllocateMore、およびクライアントは、サービス プロバイダーとは関係なく、 MAPIFreeBuffer を使用して後で解放できます。

メモリ マクロは、特定のサイズの構造体または構造体の配列を割り当てるために使用されます。 クライアントとサービス プロバイダーは、メモリを手動で割り当てるのではなく、これらのマクロを使用する必要があります。 たとえば、クライアントが 3 つのエントリを持つ受信者リストに対して名前解決処理を実行する必要がある場合、SizedADRLIST マクロを使用して、正しい数の ADRENTRY メンバーを使用して IAddrBook::ResolveName に渡す ADRLIST 構造体を作成できます。 すべてのメモリ マクロは MAPIDEFS で定義されます。H ヘッダー ファイル。 これらのマクロは次のとおりです。

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

MAPI では、メモリ管理に COM インターフェイス IMalloc の使用もサポートされています。 サービス プロバイダーには、初期化時に MAPI によって IMalloc インターフェイス ポインターが与えられ、 MAPIGetDefaultMalloc 関数を使用して取得することもできます。 MAPI 関数を介してメモリを管理するために IMalloc メソッドを使用するメイン利点は、COM メソッドを使用して既存のバッファーを再割り当てできる点です。 MAPI メモリ関数は、再割り当てをサポートしていません。