MAPI でのメモリを管理します。Managing Memory in MAPI

適用されます: OutlookApplies to: Outlook

方法とタイミングを割り当てるし、メモリを解放するのには、MAPI を使用するプログラミングの重要な部分です。Knowing how and when to allocate and free memory is an important part of programming with MAPI. MAPI には、関数とマクロの両方を一貫した方法でメモリを管理するために、クライアントまたはサービス プロバイダーを使用できますが用意されています。MAPI provides both functions and macros that your client or service provider can use to manage memory in a consistent way. 3 つの関数は次のとおりです。The three functions are as follows:

MAPIAllocateBufferMAPIAllocateBuffer

MAPIAllocateMoreMAPIAllocateMore

MAPIFreeBufferMAPIFreeBuffer

クライアントとサービス ・ プロバイダーの問題、これらの関数を使用する場合の「所有者」-をリリースする方法を知っているが、-特定のメモリ ブロックを削除します。When clients and service providers use these functions, the issue of who "owns" — that is, knows how to release — a particular block of memory is eliminated. サービス プロバイダーのメソッドを呼び出すクライアントは、任意のサイズの戻り値を保持するのに十分な大きさのバッファーを渡す必要がありますありません。A client calling a service provider method need not pass a buffer large enough to hold a return value of any size. サービス プロバイダーは、 MAPIAllocateBufferを使用しているメモリの適切な量を割り当てることが単にし、必要に応じて、 MAPIAllocateMore、およびクライアントが後で元のMAPIFreeBufferサービスに関係なくを使用してはプロバイダーです。The service provider can simply allocate the appropriate amount of memory using MAPIAllocateBuffer and, if necessary, MAPIAllocateMore, and the client can later release it at will using MAPIFreeBuffer, independent of the service provider.

構造体または特定のサイズの構造体の配列を割り当てるメモリのマクロを使用します。The memory macros are used to allocate structures or arrays of structures of a specific size. クライアントとサービス ・ プロバイダーする必要がありますこれらのマクロを使用してではなく手動でメモリを割り当てます。Clients and service providers should use these macros rather than allocate the memory manually. などの場合は、クライアントは、名前解決の 3 つのエントリを持つ受信者リストの処理を実行する必要がある、 SizedADRLISTマクロ使えますの正しい数をIAddrBook::ResolveNameに渡すためのADRLIST構造体を作成するにはADRENTRYメンバー。For example, if a client needs to perform name resolution processing on a recipient list with three entries, the SizedADRLIST macro can be used to create an ADRLIST structure to pass to IAddrBook::ResolveName with the correct number of ADRENTRY members. すべてのメモリ ・ マクロは、MAPIDEFS で定義されます。H ヘッダー ファイルです。All of the memory macros are defined in the MAPIDEFS.H header file. これらのマクロは次のとおりです。These macros are:

SizedADRLISTSizedADRLIST
SizedDtblPageSizedDtblPage
SizedDtblButtonSizedDtblButton
SizedENTRYIDSizedENTRYID
SizedDtblCheckBoxSizedDtblCheckBox
SizedSPropProblemArraySizedSPropProblemArray
SizedDtblComboBoxSizedDtblComboBox
SizedSPropTagArraySizedSPropTagArray
SizedDtblEditSizedDtblEdit
SizedSRowSetSizedSRowSet
SizedDtblGroupBoxSizedDtblGroupBox
SizedSSortOrderSetSizedSSortOrderSet
SizedDtblLabelSizedDtblLabel

MAPI には、メモリ管理にIMallocの COM インターフェイスの使用もサポートしています。MAPI also supports the use of the COM interface IMalloc for memory management. サービス プロバイダーは、 IMallocインターフェイス ポインター式によって与えられます MAPI の初期化時と、 MAPIGetDefaultMalloc関数を 1 つを取得することもできます。Service providers are given an IMalloc interface pointer by MAPI at initialization time and can also retrieve one through the MAPIGetDefaultMalloc function. IMallocメソッドを使用して MAPI の関数でメモリを管理するために主な利点は COM メソッドを使用して既存のバッファーを再割り当てすることです。The main advantage to using the IMalloc methods for managing memory over the MAPI functions is that with the COM methods it is possible to reallocate an existing buffer. MAPI メモリ関数は、再割り当てをサポートしていません。The MAPI memory functions do not support reallocation.