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.
Laden Sie die MAPI-Stubbibliothek, und geben Sie in der Registrierung eine benutzerdefinierte DLL zum Laden und Verteilen von MAPI-Aufrufen an. Oder:
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
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.
Ü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
Lesen Sie den
HKLM\Software\Clients\Mail::(default)
Registrierungswert.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
MFCMAPI ruft auf
GetMAPIPath
und übergibt NULL für den Clientparameter, um die MAPI-Standardimplementierung zu laden.GetMAPIPath
ruft aufGetMapiMsiIds
, um die Werte für MSIComponentID, MSIApplicationLCID und MSIOfficeLCID zu lesen.GetMapiMsiIds
ruft aufGetMailKey
, um den Registrierungsschlüssel für den Standard-E-Mail-Client zu öffnen.GetMapiMsiIds
verwendet das vonGetMailKey
zurückgegebene Registrierungshandle, um Werte für MSIComponentID, MSIApplicationLCID und MSIOfficeLCID nachzuschlagen.Die Werte für MSIComponentID, MSIApplicationLCID und MSIOfficeLCID werden an
GetMAPIPath
zurückgegeben.GetMAPIPath
übergibt sie dann anGetComponentPath
.GetComponentPath
lädt die MAPI-Stubbibliothek Mapi32.dll aus dem Systemverzeichnis.GetComponentPath
ruft dann die Adresse der FGetComponentPath-Funktion aus Mapi32.dll ab, vorausgesetzt, dass Mapi32.dll FGetComponentPath exportiert.Wenn beim Abrufen der Adresse von FGetComponentPath aus Mapi32.dll ein Fehler auftritt,
GetComponentPath
ruft die Adresse aus Mapistub.dll ab.GetComponentPath
ruft dann FGetComponentPath auf und ruft den Pfad der Standardversion von MAPI ab.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
GetMAPIPath
empfä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.