Verweisen auf MAPI-Funktionen

Gilt für: Outlook 2013 | Outlook 2016

Es gibt drei Methoden zum Verknüpfen: implizites Verknüpfen, explizites Verknüpfen und ein neues Hybridmodell, das die MAPI-Stubbibliothek verwendet.

Implizite Verknüpfung

In der Vergangenheit beinhaltete das Aufrufen von MAPI-Funktionen in einer Messaginganwendung immer eine Verknüpfung mit der Mapi32.lib-Bibliothek. Dies umfasste das Weiterleiten von MAPI-Aufrufen an die Windows MAPI-Stubbibliothek Mapi32.dll, die dann zur Laufzeit die Aufrufe an die MapI-Standardclientimplementierung weiterleitete. Dieser Aufrufvorgang wird als implizite Verknüpfung bezeichnet. Die linke Seite der folgenden Abbildung zeigt ein Beispiel für eine implizite Verknüpfung, die in einem MAPI-Funktionsaufrufprozess verwendet wird. Der Prozess wird von einer MAPI-Anwendung initiiert und umfasst die MAPI-Bibliothek (Mapi32.lib) und den Windows MAPI-Stub (Mapi32.dll) und wird durch die Outlook MAPI-Clientimplementierung des MAPI-Stubs (Msmapi32.dll) abgeschlossen.

Vergleich von impliziter und expliziter Verknüpfung.

Vergleich von impliziter und expliziter Verknüpfung

Explizite Verknüpfung

Da der MAPI-Standardclient die bedarfsgesteuerte Installation mithilfe von Windows Installer (MSI) unterstützt, können Sie Messaginganwendungen direkt im Outlook MAPI-Stub entwickeln, anstatt die MAPI-Bibliothek und den Windows MAPI-Stub zu verwenden. Die rechte Seite der vorherigen Abbildung zeigt ein Beispiel für einen MAPI-Funktionsaufrufprozess, beginnend mit einer MAPI-Anwendung, die nach dem Pfad und dll-Namen für den Outlook-MAPI-Stub sucht (Schritt 2 im folgenden Abschnitt) und Funktionsaufrufe an den Outlook MAPI-Stub durchführt (Schritt 3 im folgenden Abschnitt). Das folgende Verfahren zeigt, wie MAPI-Funktionen mithilfe expliziter Verknüpfungen aufgerufen werden.

Hinweis

Diese Informationen über explizite Verknüpfungen sind möglicherweise überflüssig für Ihre Anforderungen mit der Einführung der MAPIStubLibrary.lib, die im folgenden Abschnitt erläutert wird. Wie das implizite Modell verwaltet die neue Bibliothek alles und implementiert die explizite Verknüpfungslogik, die die MAPI von Outlook direkt lädt.

Weitere Informationen zu expliziten Verknüpfungen finden Sie unter Explizites Verknüpfen.

So rufen Sie MAPI-API-Elemente ohne die MAPI-Bibliothek und den Windows MAPI-Stub auf

  1. Erstellen Sie in Ihrer Programmdatei eine globale Liste von Funktionszeigern für jedes MAPI-API-Element, das Sie verwenden.

    Im folgenden Beispiel wird dieser Schritt veranschaulicht.

     //Global MAPI function pointers
     LPMAPIINITIALIZE pfnMAPIInitialize = NULL;
     LPMAPIUNINITIALIZE pfnMAPIUninitialize = NULL;
    
  2. Erstellen Sie eine Funktion, die MAPI-Funktionen initialisiert, um eine Verknüpfung mit der MAPI-DLL des MAPI-Standardclients herzustellen (z. B. Msmapi32.dll von Microsoft Outlook). Gehen Sie in dieser Funktion wie folgt vor:

    1. Laden Sie mapi32.dll aus dem entsprechenden Systemverzeichnis.

      Eigenschaft Wert
      x64 oder x86 nativ
      %windir%\system32\mapi32.dll
      x86 im WoW-Modus
      %windir%\syswow64\mapi32.dll
    2. Rufen Sie die FGetComponentPath-Funktion auf, um den Pfad und dll-Namen abzurufen, der das MAPI-Subsystem implementiert. Weitere Informationen finden Sie unter Auswählen einer bestimmten MapI-Version zum Laden.

    3. Laden Sie die DLL, indem Sie die LoadLibrary-Funktion aufrufen.

    4. Initialisieren Sie das Zeigerarray der MAPI-Funktion, indem Sie die GetProcAddress-Funktion aufrufen.

    Das folgende Beispiel zeigt die vorherigen Schritte:

     void InitializeMapiFunctions()
     {
     {
         // Get the DLL path and name of the actual MAPI implementation.
         FGetComponentPath(g_szMapiComponentGUID, NULL, szMAPIDLL, MAX_PATH);
         // Load the DLL.
         hMod = LoadLibrary(szMAPIDLL);
         // Initialize MAPI functions.
         pfnMAPIInitialize = GetProcAddress(hMod, "MAPIInitialize");
         pfnMAPIUninitialize = GetProcAddress(hMod, "MAPIUninitialize");
     }
    
  3. Rufen Sie abschließend die Funktion auf, die Sie in Schritt 2 in Ihrer Messaginganwendung erstellt haben, bevor Sie MAPI-API-Elemente aufrufen.

    Achtung

    Sie müssen die Initialisierung des MAPI-Subsystems aufheben, bevor Sie Ihre Anwendung schließen.

    Das folgende Beispiel zeigt diesen Schritt:

     int main()
     {
         HRESULT hr;
         InitializeMapiFunctions();
         // Initialize the MAPI subsystem.
         hr = (*pfnMAPIInitialize)(NULL);
         if (hr!= S_OK)
         {
             // Handle the error case.
         }
         // Here is where you make calls to other MAPI interfaces.
         // Uninitialize the MAPI subsystem.
         (*pfnMAPIUninitialize)();
     return (0);
     }
    

MAPIStubLibrary.lib

Die Einführung von Microsoft Outlook 2010 und 64-Bit-MAPI, die jetzt auf die Microsoft Outlook 2013 erweitert wird, erfordert mehr als die herkömmliche 32-Bit-API für die vollständige Implementierung. Ein neues Projekt, die MAPI Stub Library, das auf der CodePlex-Website veröffentlicht wurde, bietet einen Drop-In-Ersatz für Mapi32.lib, das sowohl das Erstellen von 32-Bit- als auch 64-Bit-MAPI-Anwendungen unterstützt. MAPIStubLibrary.lib entfällt die Notwendigkeit, explizit mit MAPI zu verknüpfen, und nachdem Sie es erstellt haben, können Sie Mapi32.lib aus Ihren Linkereinstellungen entfernen und durch MAPIStubLibrary.lib ersetzen; Es sollten keine weiteren Änderungen am Code erforderlich sein. Außerdem entfällt die Notwendigkeit, LoadLibrary-, GetProcAddress- und FreeLibrary-Code zu schreiben, um neuere Exporte zu verarbeiten, die in dieser Bibliotheksdatei, aber nicht in Mapi32.lib enthalten sind, was bei expliziter Verknüpfung erforderlich wäre.

Einige der neuen Funktionen, die mit dieser Bibliothek verknüpft sind und in Mapi32.lib nicht verfügbar sind, umfassen Folgendes:

Eine alternative Methode zum Integrieren der MAPI-Stubbibliothek besteht darin, die Quelldateien, MapiStubLibrary.cpp und StubUtils.cpp, direkt in Ihr Projekt zu kopieren und alle Verknüpfungen mit Mapi32.lib und jeglichem Code zu entfernen, der explizit mit MAPI verknüpft ist.

Informationen zum Erstellen und Integrieren der MAPI-Stubbibliothek in Ihr Projekt sowie Fragen zu dieser Bibliothek, z. B. wann und warum, finden Sie in der MAPI-Stubbibliothek auf der CodePlex-Website.

Siehe auch