読み込む MAPI の特定のバージョンを選択する
適用対象: Outlook 2013 | Outlook 2016
MAPI の実装に明示的にリンクする場合は、読み込む実装を慎重に選択する必要があります。
MAPI の実装に明示的にリンクするには、2 つの方法があります。
MAPI スタブ ライブラリを読み込み、MAPI 呼び出しを読み込んでディスパッチするカスタム DLL をレジストリで指定します。 または、
MAPI クライアント参照アルゴリズムを実装して、既定のメール クライアントで使用される MAPI のバージョンを検索して読み込みます。
Mapi32.dll スタブ レジストリ設定を変更して、MAPI の実装を使用するようにアプリケーションに指示できるため、テストした MAPI の実装を使用するようにアプリケーションに指示することをお勧めします。 次に、明示的にリンクする両方の方法について説明します。
レジストリから MAPI 実装情報を読み取る
メール クライアントのカスタム DLL を示すレジストリ キーは、メール クライアントの
HKLM\Software\Clients\Mail
キーの下にあります。次の表では、これらのキーについて説明します。
キー 説明 MSIComponentID 単純な MAPI または MAPI 呼び出しをエクスポートする DLL を識別する Windows インストーラー PublishComponent カテゴリ ID (GUID)。 設定した場合、このキーは DLLPath キーまたは DLLPathEx キーよりも優先されます。 MSIApplicationLCID アプリケーションのロケール識別子 (LCID)。 最初の文字列値は、 HKLM\Software
からのサブキーを識別し、それ以降の文字列値は、ロケール情報を含むこのキーの下にあるレジストリ値を識別します。MSIOfficeLCID Microsoft Office 用 LCID。 最初の文字列値は、このキーの下にあるレジストリ値を識別し、以降の文字列値から HKLM\Software
サブキーを識別します。これらのキーから情報を取得します。
前の手順で取得した値を FGetComponentPath 関数に渡します。 FGetComponentPath は、MAPI スタブ ライブラリ Mapistub.dll によってエクスポートされる関数です。 MAPI のカスタム バージョンのパスを返します。
既定としてマークされた MAPI の実装の読み込み
レジストリ値を
HKLM\Software\Clients\Mail::(default)
読み取ります。前述のように、指定されたクライアントの情報を検索します。
注:
既定のメール クライアントでは拡張 MAPI が実装されていない可能性があることに注意してください。
例
Outlook で実装されている MAPI を読み込むには、 で HKLM\Software\Clients\Mail\Microsoft Outlook
レジストリ キーを検索し、 FGetComponentPath に渡します。
FGetComponentPath は、Outlook の MAPI 実装のパスを返します。
キー MSIComponentID、MSIApplicationLCID、MSIOfficeLCID が設定されていない場合は、DLLPathEx レジストリ値をチェックします。 キーが設定されている場合、 FGetComponentPath は、MAPI のクライアントの実装のパスを提供します。
MAPI クライアント参照アルゴリズムの実装
次の表に、MAPI のカスタム実装のパスを検索するために使用される MFCMAPI の 4 つの関数を示します。
Function | 説明 |
---|---|
GetMAPIPath |
MAPI ライブラリ パスを取得します。 |
GetMailKey |
MAPI メール レジストリ キーを取得します。 |
GetMapiMsiIds |
Windows インストーラー識別子を取得します。 |
GetComponentPath |
FGetComponentPath を使用してコンポーネント パスを取得します。 |
MFCMAPI は既定で MAPI の既定の実装を読み込むため、MAPI の別の実装を使用する場合は、それを明示的に指示する必要があります。 これは、 Session\Load MAPI ルーチンを使用して実行されます。
これらの関数のしくみ
MFCMAPI は、 を呼び出
GetMAPIPath
し、クライアント パラメーターに NULL を渡して、既定の MAPI 実装を読み込みます。GetMAPIPath
を呼び出GetMapiMsiIds
して 、MSIComponentID、 MSIApplicationLCID、 MSIOfficeLCID の値を読み取ります。GetMapiMsiIds
を呼び出GetMailKey
して、既定のメール クライアントのレジストリ キーを開きます。GetMapiMsiIds
では、 によってGetMailKey
返されるレジストリ ハンドルを使用して、 MSIComponentID、 MSIApplicationLCID、 および MSIOfficeLCID の値を検索します。MSIComponentID、MSIApplicationLCID、MSIOfficeLCID の値は に
GetMAPIPath
返されます。GetMAPIPath
次に、それらを にGetComponentPath
渡します。GetComponentPath
は、MAPI スタブ ライブラリ (Mapi32.dll) をシステム ディレクトリから読み込みます。GetComponentPath
次に、 FGetComponentPath 関数のアドレスを Mapi32.dll から取得します。Mapi32.dll は FGetComponentPath をエクスポートすると仮定します。Mapi32.dll から FGetComponentPath のアドレスを取得できない場合は、
GetComponentPath
Mapistub.dll からアドレスを取得します。GetComponentPath
次に 、FGetComponentPath を呼び出し、MAPI の既定のバージョンのパスを取得します。GetMAPIPath
次に、呼び出し元にこのパスを返します。MAPI を読み込み、「 MAPI 関数へのリンク」の説明に従って、MAPI へのリンクを明示的に読み込みます。
注:
- 英語と英語以外のロケールの MAPI のローカライズされたコピーをサポートするには、
GetMAPIPath
MSIApplicationLCID サブキーと MSIOfficeLCID サブキーの値を読み取ります。GetMAPIPath
次に FGetComponentPath を呼び出し、最初に MSIApplicationLCID を szQualifier として指定し、もう一度 SzQualifier として MSIOfficeLCID を指定します。 英語以外の言語をサポートするメール クライアントのレジストリ キーの詳細については、「 MAPI DLL の MSI キーの設定」を参照してください。 - MFCMAPI が を使用して
GetMAPIPath
MAPI のパスを受け取らない場合は、システム ディレクトリから MAPI スタブ ライブラリが読み込まれます。 - 「MAPI 呼び出しを MAPI DLL に明示的にマッピングする」で説明されている MSMapiApps レジストリ値は、MAPI スタブ ライブラリが使用されている場合にのみ適用されます。 MAPI の特定の実装を読み込むか、既定の実装を読み込むアプリケーションでは、 MSMapiApps レジストリ キーを設定する必要はありません。