Implementieren eines Advise-Senkenobjekts
Gilt für: Outlook 2013 | Outlook 2016
Ein Client kann entweder seine eigenen Beratungssenkenobjekte implementieren oder die Hilfsfunktion HrAllocAdviseSink verwenden. HrAllocAdviseSink erstellt ein Beratungssenkenobjekt mit einer Implementierung von OnNotify , die eine Rückruffunktion aufruft.
Die Verwendung von HrAllocAdviseSink hat Vor- und Nachteile. Es kann Arbeit speichern, bietet aber keine Kontrolle über die Verweiszählung des von ihr erstellten Beratungssenkenobjekts. Daher sollten Clients, die die Freigabe ihrer Beratungssenke sorgfältig steuern müssen oder über Interdependenz zwischen ihrer Empfehlungssenke und einem anderen Clientobjekt verfügen, ihre eigene IMAPIAdviseSink-Implementierung erstellen und die Verwendung von HrAllocAdviseSink ganz vermeiden.
Ein Kunde, der eine eigene Beratungssenke implementiert, sollte es zu einem unabhängigen Objekt machen, das nicht mit anderen Objekten verknüpft ist oder davon abhängig ist, um potenzielle Komplikationen bei der Verweiszählung und Objektfreigabe zu vermeiden. Wenn Sie ihre Empfehlungssenke jedoch als Teil eines anderen Objekts implementieren oder einen Rückzeiger auf ein anderes Objekt als Datenmember einschließen müssen, empfiehlt es sich, zwei separate Verweisanzahlen beizubehalten: eine für das Objekt, auf das von der Empfehlungssenke verwiesen wird, und eine für die Empfehlungssenke.
Wenn die Verweisanzahl des Objekts, auf das verwiesen wird, auf 0 (null) fällt, können alle zugehörigen Methoden fehlschlagen, und die VTable kann zerstört werden, aber der Speicher für die Empfehlungssenke muss intakt bleiben, bis die Verweisanzahl ebenfalls auf 0 (null) fällt. Dies bedeutet, dass die Release-Methode der Empfehlungssenke ihre Verweisanzahl verringern und das Objekt zerstören muss, wenn diese Anzahl null erreicht. Wenn zwei separate Verweisanzahlen nicht beibehalten werden, wäre es einfach, die Empfehlungssenke im Rahmen des Release-Prozesses des umschließenden Objekts versehentlich zu zerstören.
Clients, die HrAllocAdviseSink zum Implementieren einer Empfehlungssenke verwenden, müssen ebenso darauf achten, dass ihre Rückruffunktion nicht als Methode in ein anderes Beratungssenkeobjekt eingeschlossen wird. Bei C++-Clients ist es verlockend, dies zu tun und den this-Zeiger als Parameter zu übergeben. Dies ist eine gefährliche Strategie, da Clients in der Regel ein Objekt freigeben, wenn dessen Verweisanzahl 0 (null) erreicht. Durch das Freigeben des Arbeitsspeichers für das Objekt der Empfehlungssenke wird der zeiger ungültig .
Abhängig vom Ereignistyp und der Empfehlungsquelle kann Ihre OnNotify-Methode Ereignisse auf unterschiedliche Weise behandeln. Die folgende Tabelle enthält Vorschläge zur Behandlung einiger Standardereignisse.
Ereignistyp | Behandeln in OnNotify |
---|---|
Objekt verschoben |
Wenn das ursprüngliche übergeordnete Objekt des verschobenen Objekts mit dem neuen übergeordneten Objekt verknüpft ist, aktualisieren Sie die Ansicht beginnend mit dem Ordner- oder Adressbuchcontainer, der in der Hierarchie am höchsten ist. Wenn die beiden übergeordneten Container nicht miteinander verknüpft sind, aktualisieren Sie beide Ansichten. |
Neue Nachricht |
Ändern Sie die Benutzeroberfläche, um den Benutzer über die Ankunft einer oder mehrerer neuer Nachrichten zu informieren. Platzieren Sie den Empfangsordner in der aktuellen Ansicht. |
Error |
Protokollieren Sie den Fehler für alle Objekte mit Ausnahme der Sitzung, falls erforderlich, und geben Sie zurück. Melden Sie sich für das Sitzungsobjekt nach Möglichkeit ab. |
Suche abgeschlossen |
Keine Verarbeitung erforderlich. |
Hinweis
Benachrichtigungshandler sollten erneut verwendet werden.