次の方法で共有


読み込む MAPI の特定のバージョンを選択する

適用対象: Outlook 2013 | Outlook 2016

MAPI の実装に明示的にリンクする場合は、読み込む実装を慎重に選択する必要があります。

MAPI の実装に明示的にリンクするには、2 つの方法があります。

  1. MAPI スタブ ライブラリを読み込み、MAPI 呼び出しを読み込んでディスパッチするカスタム DLL をレジストリで指定します。 または、

  2. MAPI クライアント参照アルゴリズムを実装して、既定のメール クライアントで使用される MAPI のバージョンを検索して読み込みます。

Mapi32.dll スタブ レジストリ設定を変更して、MAPI の実装を使用するようにアプリケーションに指示できるため、テストした MAPI の実装を使用するようにアプリケーションに指示することをお勧めします。 次に、明示的にリンクする両方の方法について説明します。

レジストリから MAPI 実装情報を読み取る

  1. メール クライアントのカスタム 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 サブキーを識別します。

    これらのキーから情報を取得します。

  2. 前の手順で取得した値を FGetComponentPath 関数に渡します。 FGetComponentPath は、MAPI スタブ ライブラリ Mapistub.dll によってエクスポートされる関数です。 MAPI のカスタム バージョンのパスを返します。

既定としてマークされた MAPI の実装の読み込み

  1. レジストリ値を HKLM\Software\Clients\Mail::(default) 読み取ります。

  2. 前述のように、指定されたクライアントの情報を検索します。

注:

既定のメール クライアントでは拡張 MAPI が実装されていない可能性があることに注意してください。

Outlook で実装されている MAPI を読み込むには、 で HKLM\Software\Clients\Mail\Microsoft Outlook レジストリ キーを検索し、 FGetComponentPath に渡します。 FGetComponentPath は、Outlook の MAPI 実装のパスを返します。

キー MSIComponentIDMSIApplicationLCIDMSIOfficeLCID が設定されていない場合は、DLLPathEx レジストリ値をチェックします。 キーが設定されている場合、 FGetComponentPath は、MAPI のクライアントの実装のパスを提供します。

MAPI クライアント参照アルゴリズムの実装

次の表に、MAPI のカスタム実装のパスを検索するために使用される MFCMAPI の 4 つの関数を示します。

Function 説明
GetMAPIPath
MAPI ライブラリ パスを取得します。
GetMailKey
MAPI メール レジストリ キーを取得します。
GetMapiMsiIds
Windows インストーラー識別子を取得します。
GetComponentPath
FGetComponentPath を使用してコンポーネント パスを取得します。

MFCMAPI は既定で MAPI の既定の実装を読み込むため、MAPI の別の実装を使用する場合は、それを明示的に指示する必要があります。 これは、 Session\Load MAPI ルーチンを使用して実行されます。

これらの関数のしくみ

  1. MFCMAPI は、 を呼び出 GetMAPIPathし、クライアント パラメーターに NULL を渡して、既定の MAPI 実装を読み込みます。

  2. GetMAPIPath を呼び出 GetMapiMsiIds して 、MSIComponentIDMSIApplicationLCIDMSIOfficeLCID の値を読み取ります。

  3. GetMapiMsiIds を呼び出 GetMailKey して、既定のメール クライアントのレジストリ キーを開きます。

  4. GetMapiMsiIds では、 によって GetMailKey 返されるレジストリ ハンドルを使用して、 MSIComponentIDMSIApplicationLCIDおよび MSIOfficeLCID の値を検索します。

  5. MSIComponentIDMSIApplicationLCIDMSIOfficeLCID の値は にGetMAPIPath返されます。 GetMAPIPath 次に、それらを に GetComponentPath渡します。

  6. GetComponentPath は、MAPI スタブ ライブラリ (Mapi32.dll) をシステム ディレクトリから読み込みます。

  7. GetComponentPath 次に、 FGetComponentPath 関数のアドレスを Mapi32.dll から取得します。Mapi32.dll は FGetComponentPath をエクスポートすると仮定します。

  8. Mapi32.dll から FGetComponentPath のアドレスを取得できない場合は、 GetComponentPath Mapistub.dll からアドレスを取得します。

  9. GetComponentPath 次に 、FGetComponentPath を呼び出し、MAPI の既定のバージョンのパスを取得します。

  10. GetMAPIPath 次に、呼び出し元にこのパスを返します。MAPI を読み込み、「 MAPI 関数へのリンク」の説明に従って、MAPI へのリンクを明示的に読み込みます。

注:

  • 英語と英語以外のロケールの MAPI のローカライズされたコピーをサポートするには、 GetMAPIPathMSIApplicationLCID サブキーと MSIOfficeLCID サブキーの値を読み取ります。 GetMAPIPath次に FGetComponentPath を呼び出し、最初に MSIApplicationLCIDszQualifier として指定し、もう一度 SzQualifier として MSIOfficeLCID を指定します。 英語以外の言語をサポートするメール クライアントのレジストリ キーの詳細については、「 MAPI DLL の MSI キーの設定」を参照してください。
  • MFCMAPI が を使用して GetMAPIPathMAPI のパスを受け取らない場合は、システム ディレクトリから MAPI スタブ ライブラリが読み込まれます。
  • MAPI 呼び出しを MAPI DLL に明示的にマッピングする」で説明されている MSMapiApps レジストリ値は、MAPI スタブ ライブラリが使用されている場合にのみ適用されます。 MAPI の特定の実装を読み込むか、既定の実装を読み込むアプリケーションでは、 MSMapiApps レジストリ キーを設定する必要はありません。

関連項目