トランスポート プロバイダーの初期化

適用対象: Outlook 2013 | Outlook 2016

トランスポート スプーラー インターフェイスは、MAPI スプーラーがトランスポート プロバイダーに対して行う呼び出しを定義します。 トランスポート プロバイダーは、これらのルーチンをダイナミック リンク ライブラリ (DLL) に実装します。 MAPI スプーラーで使用される DLL への最初の直接エントリ ポイントは、トランスポート プロバイダー初期化関数 XPProviderInit である必要があります。

MAPI では、 ルーチン GetProcAddress を使用して、サービス プロバイダーの初期化ルーチンのアドレスを取得し、そのルーチンを呼び出します。 初期化ルーチンの名前は、トランスポート プロバイダーの XPProviderInit です。 他の種類の MAPI サービス プロバイダーでは異なるため、1 つの DLL には任意の種類のサービス プロバイダーの組み合わせを含めることができますが、特定の種類のサービス プロバイダーは 1 つだけです。 ただし、特定の型の 1 つのサービス プロバイダーは、その型の複数のサービスを実装できます。 たとえば、1 つのトランスポート プロバイダーは、複数のメッセージ サービスにメッセージ トランスポート機能を実装できます。

mapispi.h ヘッダー ファイルには、トランスポート プロバイダー初期化関数の関数プロトタイプの型定義と、それに対する定義済みのプロシージャ名があります。 GetProcAddress で使用される名前と同じ名前で C および C++ ファイルの初期化ルーチンに名前を付け、DLL.DEF ファイルで簡単なエクスポート宣言を使用すると、初期化ルーチンのパラメーターの型チェックが自動的に取得されます。 例については、トランスポート プロバイダーのサンプル ソース コードを参照してください。 詳細については、「 トランスポート プロバイダーのサンプル」を参照してください。

サービス プロバイダーの初期化呼び出しが成功したが、MAPI が処理するには小さすぎるサービス プロバイダー インターフェイスのバージョン番号を返す場合、MAPI は直ちにサービス プロバイダー オブジェクトの Release メソッドを呼び出し、初期化呼び出しがMAPI_E_VERSIONで失敗したかのように続行します。 この方法で MAPI とサービス プロバイダーは、処理できるサービス プロバイダー インターフェイスのバージョン番号の範囲を共同で定義し、一致するものが何もない場合、サービス プロバイダーの読み込みはMAPI_E_VERSION戻り値で失敗します。

サービス プロバイダー リソースへのアクセスを取得する MAPI スプーラーの最後の手順は、トランスポート プロバイダーにログオンすることです。 MAPI スプーラーは、 XPProviderInit から返される IXPProvider: IUnknown オブジェクトの IXPProvider ::TransportLogon メソッド 呼び出します。 これは、資格情報が使用されている場合にチェックされ、ダイアログ ボックスを許可できる呼び出しです。

プロセスが同じトランスポート プロバイダーと MAPI セッションで 2 つ目のトランスポート セッションを開く場合、トランスポート プロバイダー DLL は 2 つ目のプロバイダー オブジェクトを作成しないでください。 最初のプロバイダー オブジェクトを使用して、2 番目のトランスポート セッションにログオンする必要があります。 トランスポート プロバイダーは、1 つのプロバイダー オブジェクトで複数のトランスポート セッションをサポートするようにプログラムする必要があります。 2 つ目のプロバイダー オブジェクトは、同じプロセスで異なる MAPI セッションが使用されている場合にのみ作成する必要があります。