Freigeben über


Initialisieren von MAPI

Gilt für: Outlook 2013 | Outlook 2016

Alle Clientanwendungen, die die MAPI-Bibliotheken verwenden, müssen die MAPIInitialize-Funktion aufrufen. Weitere Informationen finden Sie unter MAPIInitialize. MAPIInitialize initialisiert globale Daten für die Sitzung und bereitet die MAPI-Bibliotheken auf die Annahme von Aufrufen vor. Es gibt einige Flags, die in einigen Situationen festgelegt werden müssen:

  • MAPI_NT_SERVICE

    Legen Sie das MAPI_NT_SERVICE-Flag fest, wenn Ihr Client als Windows-Dienst implementiert ist. Wenn Ihr Client ein Windows-Dienst ist und Sie dieses Flag nicht festlegen, erkennt MAPI es nicht als Dienst.

  • MAPI_MULTITHREAD_NOTIFICATIONS

    Das MAPI_MULTITHREAD_NOTIFICATIONS-Flag bezieht sich darauf, wie MAPI Benachrichtigungen verwaltet. MAPI erstellt ein ausgeblendetes Fenster, das Fenstermeldungen empfängt, wenn Änderungen an einem Objekt auftreten, das Benachrichtigungen generiert. Die Fensternachrichten werden zu einem bestimmten Zeitpunkt verarbeitet, wodurch die Benachrichtigungen gesendet und die entsprechenden IMAPIAdviseSink::OnNotify-Methoden aufgerufen werden.

  • MAPI_NO_COINIT

    Legen Sie das flag MAPI_NO_COINT so fest, dass MAPIInitialize nicht versucht, COM mit einem Aufruf von CoInitialize zu initialisieren. Wenn eine MAPIINIT_0-Struktur an MAPIInitialize übergeben wird, wobei ulFlags auf MAPI_NO_COINIT festgelegt ist, geht MAPI davon aus, dass COM bereits initialisiert wurde, und umgeht den Aufruf von CoInitialize.

Wenn MAPI_MULTITHREAD_NOTIFICATIONS Flag nicht übergeben wird, erstellt MAPI das Benachrichtigungsfenster in dem Thread, der für Ihren ersten MAPIInitialize-Aufruf verwendet wurde. MAPI erstellt das Benachrichtigungsfenster in einem separaten Thread, wenn MAPI_MULTITHREAD_NOTIFICATIONS übergeben wird – ein Thread, der für die Verarbeitung von Benachrichtigungen vorgesehen ist. MAPI erwartet, dass der Thread, der zum Erstellen des ausgeblendeten Benachrichtigungsfensters verwendet wird, Folgendes aus:

  • Sie verfügen über eine Nachrichtenschleife.

  • Bleiben Sie während der gesamten Lebensdauer der Sitzung nicht blockiert.

  • Sie haben eine längere Lebensdauer als jeder andere Thread, der von Ihrem Client erstellt wurde.

Sie können auswählen, welcher Thread verwendet wird, indem Sie im ersten MAPIInitialize-Aufruf ein Flag festlegen. Die Gefahr, dass einer Ihrer Threads die Benachrichtigungen verarbeiten kann, besteht darin, dass, wenn der Thread verschwindet, das Benachrichtigungsfenster zerstört wird und keine Benachrichtigungen mehr an andere Threads gesendet werden können. Darüber hinaus kann eine spezielle Verarbeitung erforderlich sein, um die Verteilung der Benachrichtigungsmeldungen zu steuern, die in die Nachrichtenwarteschlange des ausgeblendeten Fensters gepostet werden.

Wenn Sie ein separates Fenster zum Verarbeiten von Benachrichtigungen verwenden, können Sie sicher sein, dass Benachrichtigungen zum geeigneten Zeitpunkt in einem entsprechenden Thread angezeigt werden. Sie benötigen keinen speziellen Code, um die Windows-Nachrichten zu überprüfen und zu verarbeiten, die im Benachrichtigungsfenster gepostet werden.

MAPI empfiehlt, dass die folgenden Clientanwendungen einen separaten Thread verwenden, um das ausgeblendete Fenster für die Unterstützung von Benachrichtigungen zu erstellen:

  • Alle Multithreadclients.

  • Singlethread-Windows-Dienste und Win32-Konsolenanwendungen.

  • Singlethreadclients, die ihren Standard Thread nicht für Benachrichtigungen verwenden müssen.

Um den separaten Threadansatz zu verwenden, rufen Sie MAPIInitialize für jeden Thread auf, und legen Sie das MAPI_MULTITHREAD_NOTIFICATIONS-Flag fest.

Hinweis

Nur der erste Aufruf von MAPIInitialize durch einen Client bewirkt, dass ein ausgeblendetes Fenster erstellt wird, um Benachrichtigungen zu unterstützen. Nachfolgende Aufrufe führen nur dazu, dass eine Verweisanzahl inkrementiert wird.