Freigeben über


Verwenden von Thread-Safe-Objekten

Gilt für: Outlook 2013 | Outlook 2016

Clientanwendungen können davon ausgehen, dass Objekte, die direkt oder als Rückrufe verwendet werden, immer threadsicher sind, außer in den folgenden Fällen:

  • Das status Objekt eines Transportanbieters, das über einen Clientaufruf von IMAPISession::OpenEntry mit einem Eintragsbezeichner aus der status Tabellenzeile des Anbieters abgerufen wird.

  • Alle MAPI-Formularobjekte, die über einen Clientaufruf von MAPIOpenFormMgr abgerufen werden. Formularobjekte befolgen Apartmentmodellregeln, und Clients müssen sie und alle darin enthaltenen Objekte nur in dem Thread verwenden, von dem sie erstellt wurden.

Wenn ein Client auf die Zeile eines Transportanbieters in der status Tabelle zugreift, die den Eintragsbezeichner des zugeordneten status -Objekts enthält, kann der Client OpenEntry mit diesem Eintragsbezeichner aufrufen, um das status -Objekt zu öffnen. Dieses status -Objekt ist nicht threadsicher, da Transportanbieter im Kontext des MAPI-Spoolers ausgeführt werden und keinen separaten Kontext für ihr status -Objekt beibehalten. Das status-Objekt befolgt Wohnungsmodellregeln, und Clients dürfen es nur für den Thread verwenden, der es erstellt hat.

Ein Client muss auch MAPIInitialize für jeden Thread aufrufen, bevor MAPI-Objekte und MAPIUninitialize verwendet wird, wenn diese Verwendung abgeschlossen ist. Diese Aufrufe sollten auch dann erfolgen, wenn die zu verwendenden Objekte von einer externen Quelle an den Thread übergeben werden. MAPIInitialize und MAPIUninitialize können von überall aufgerufen werden, außer aus einer Win32 DllMain-Funktion , einer Funktion, die vom System aufgerufen wird, wenn Prozesse und Threads initialisiert und beendet werden, oder bei Aufrufen der Funktionen LoadLibrary und FreeLibrary .

Indirekte Verwendungsobjekte sollten niemals als threadsicher gelten. Indirekte Verwendungsobjekte werden von Methoden zurückgegeben, die Zielschnittstellenzeiger als Eingabeparameter erfordern. Beispiele für solche Methoden sind IMAPIProp::CopyTo und CopyProps, IMAPIFolder::CopyFolder und CopyMessage und IMsgServiceAdmin::CopyMsgService. Wenn ein Dienstanbieter ein solches Objekt aus einem anderen Als dem Thread aufrufen möchte, an dem es übergeben wurde, ist der Anbieter für das explizite Marshallen des Objekts verantwortlich.