Share via


Auswählen einer bestimmten zu ladenden MAPI-Version

Gilt für: Outlook 2013 | Outlook 2016

Beim expliziten Verknüpfen mit einer MapI-Implementierung müssen Sie sorgfältig auswählen, welche Implementierung geladen werden soll.

Es gibt zwei Methoden, um explizit mit einer Implementierung von MAPI zu verknüpfen.

  1. Laden Sie die MAPI-Stubbibliothek, und geben Sie in der Registrierung eine benutzerdefinierte DLL zum Laden und Verteilen von MAPI-Aufrufen an. Oder:

  2. Implementieren Sie den MAPI-Clientsuchealgorithmus, um die vom Standard-E-Mail-Client verwendete MAPI-Version nachzuschlagen und zu laden.

Da Sie die Mapi32.dll Stub-Registrierungseinstellungen so ändern können, dass Ihre Anwendung eine beliebige MapI-Implementierung verwendet, empfehlen wir, dass Sie Ihre Anwendung anweisen, eine MapI-Implementierung zu verwenden, mit der Sie getestet haben. Im Folgenden werden beide Methoden zum expliziten Verknüpfen beschrieben.

Lesen von MAPI-Implementierungsinformationen aus der Registrierung

  1. Die Registrierungsschlüssel, die eine benutzerdefinierte DLL für einen E-Mail-Client angeben, befinden sich unter dem HKLM\Software\Clients\Mail Schlüssel des E-Mail-Clients.

    In der folgenden Tabelle werden diese Schlüssel beschrieben:

    Key Beschreibung
    MSIComponentID
    Eine Windows Installer PublishComponent-Kategorie-ID (GUID), die die DLL identifiziert, die einfache MAPI- oder MAPI-Aufrufe exportiert. Wenn festgelegt, hat dieser Schlüssel Vorrang vor dem DLLPath - oder DLLPathEx-Schlüssel .
    MSIApplicationLCID
    Gebietsschemabezeichner (LCID) für Ihre Anwendung. Der erste Zeichenfolgenwert identifiziert einen Unterschlüssel aus und HKLM\Software nachfolgende Zeichenfolgenwerte identifizieren Registrierungswerte unterhalb dieses Schlüssels, die Gebietsschemainformationen enthalten.
    MSIOfficeLCID
    LCIDs für Microsoft Office. Der erste Zeichenfolgenwert identifiziert einen Unterschlüssel aus und HKLM\Software nachfolgende Zeichenfolgenwerte identifizieren Registrierungswerte unterhalb dieses Schlüssels.

    Rufen Sie die Informationen aus diesen Schlüsseln ab.

  2. Übergeben Sie die Werte, die Sie aus dem vorherigen Schritt abgerufen haben, an die FGetComponentPath-Funktion . FGetComponentPath ist eine Funktion, die von der MAPI-Stubbibliothek Mapistub.dll exportiert wird. Er gibt den Pfad der benutzerdefinierten Version von MAPI zurück.

Laden der Als Standard markierten MAPI-Implementierung

  1. Lesen Sie den HKLM\Software\Clients\Mail::(default) Registrierungswert.

  2. Suchen Sie die Informationen für den angegebenen Client, wie weiter oben beschrieben.

Hinweis

Beachten Sie, dass der Standard-E-Mail-Client möglicherweise keine erweiterte MAPI implementiert.

Beispiel

Um MAPI wie von Outlook implementiert zu laden, suchen Sie unter die Registrierungsschlüssel HKLM\Software\Clients\Mail\Microsoft Outlook , und übergeben Sie sie an FGetComponentPath. FGetComponentPath gibt den Pfad für die Implementierung von MAPI in Outlook zurück.

Wenn die Schlüssel MSIComponentID, MSIApplicationLCID und MSIOfficeLCID nicht festgelegt sind, überprüfen Sie den Registrierungswert DLLPathEx . Wenn die Schlüssel festgelegt sind, gibt FGetComponentPath den Pfad der MapI-Implementierung des Clients an.

Implementieren des MAPI-Clientsuchealgorithmus

In der folgenden Tabelle sind die vier Funktionen von MFCMAPI aufgeführt, die zum Suchen des Pfads für eine benutzerdefinierte Implementierung von MAPI verwendet werden:

Funktion Beschreibung
GetMAPIPath
Ruft den MAPI-Bibliothekspfad ab.
GetMailKey
Ruft den MAPI-E-Mail-Registrierungsschlüssel ab.
GetMapiMsiIds
Ruft den Windows Installer-Bezeichner ab.
GetComponentPath
Ruft den Komponentenpfad mithilfe von FGetComponentPath ab.

Da MFCMAPI standardmäßig die Standardimplementierung von MAPI lädt, müssen Sie dies explizit anweisen, wenn Sie eine andere MapI-Implementierung verwenden möchten. Dies erfolgt mithilfe der MAPI-Routine Session\Load .

Funktionsweise dieser Funktionen

  1. MFCMAPI ruft auf GetMAPIPathund übergibt NULL für den Clientparameter, um die MAPI-Standardimplementierung zu laden.

  2. GetMAPIPath ruft auf GetMapiMsiIds , um die Werte für MSIComponentID, MSIApplicationLCID und MSIOfficeLCID zu lesen.

  3. GetMapiMsiIds ruft auf GetMailKey , um den Registrierungsschlüssel für den Standard-E-Mail-Client zu öffnen.

  4. GetMapiMsiIds verwendet das von GetMailKey zurückgegebene Registrierungshandle, um Werte für MSIComponentID, MSIApplicationLCID und MSIOfficeLCID nachzuschlagen.

  5. Die Werte für MSIComponentID, MSIApplicationLCID und MSIOfficeLCID werden an GetMAPIPathzurückgegeben. GetMAPIPath übergibt sie dann an GetComponentPath.

  6. GetComponentPath lädt die MAPI-Stubbibliothek Mapi32.dll aus dem Systemverzeichnis.

  7. GetComponentPath ruft dann die Adresse der FGetComponentPath-Funktion aus Mapi32.dll ab, vorausgesetzt, dass Mapi32.dll FGetComponentPath exportiert.

  8. Wenn beim Abrufen der Adresse von FGetComponentPath aus Mapi32.dll ein Fehler auftritt, GetComponentPath ruft die Adresse aus Mapistub.dll ab.

  9. GetComponentPath ruft dann FGetComponentPath auf und ruft den Pfad der Standardversion von MAPI ab.

  10. GetMAPIPath gibt dann diesen Pfad an den Aufrufer zurück, der dann MAPI lädt und explizit verknüpfungen, wie unter Link zu MAPI-Funktionen beschrieben.

Hinweis

  • Um lokalisierte Kopien von MAPI für englische und nicht englische Gebietsschemas zu unterstützen, GetMAPIPath liest die Werte für die Unterschlüssel MSIApplicationLCID und MSIOfficeLCID . GetMAPIPath ruft dann FGetComponentPath auf, wobei zuerst MSIApplicationLCID als szQualifier und erneut MSIOfficeLCID als szQualifier angegeben wird. Weitere Informationen zu Registrierungsschlüsseln für E-Mail-Clients, die nicht englischsprachige Sprachen unterstützen, finden Sie unter Einrichten der MSI-Schlüssel für Ihre MAPI-DLL.
  • Wenn MFCMAPI keinen Pfad für MAPI mit GetMAPIPathempfängt, wird die MAPI-Stubbibliothek aus dem Systemverzeichnis geladen.
  • Der unter Explizites Zuordnen von MAPI-Aufrufen zu MAPI-DLLs beschriebeneMSMapiApps-Registrierungswert gilt nur, wenn die MAPI-Stubbibliothek verwendet wird. Anwendungen, die eine bestimmte Implementierung von MAPI oder die Standardimplementierung laden, müssen den Registrierungsschlüssel MSMapiApps nicht festlegen.

Siehe auch