Freigeben über


Zusammenfassung der ATL-Ereignisbehandlung

Im Allgemeinen ist die Behandlung von COM-Ereignissen ein relativ einfacher Prozess. Es gibt drei Standard Schritte:

  • Implementieren Sie die Ereignisschnittstelle für Ihr Objekt.

  • Empfehlen Sie der Ereignisquelle, dass Ihr Objekt Ereignisse empfangen möchte.

  • Heben Sie die Benachrichtigung der Ereignisquelle auf, wenn ihr Objekt keine Ereignisse mehr empfangen muss.

Implementieren der Schnittstelle

Es gibt vier Standard Möglichkeiten der Implementierung einer Schnittstelle mithilfe von ATL.

Ableiten von Geeignet für Schnittstellentyp Erfordert, dass Sie alle Methoden implementieren* Erfordert zur Laufzeit eine Typbibliothek.
Die Schnittstelle Vtable Ja Nein
IDispatchImpl Dual Ja Ja
Idispeventimpl Disp-Schnittstelle Nein Ja
IDispEventSimpleImpl Disp-Schnittstelle Nein Nein

* Wenn Sie ATL-Supportklassen verwenden, müssen Sie die IUnknown Methoden IDispatch nie manuell implementieren.

Beratung und Unadvising der Ereignisquelle

Es gibt drei Standard Möglichkeiten, eine Ereignisquelle mithilfe von ATL zu beraten und zu aufheben.

Funktion beraten Unadvise-Funktion Am besten geeignet für die Verwendung mit Erfordert, dass Sie ein Cookie nachverfolgen Kommentare
AtlAdvise, CComPtrBase::Advise AtlUnadvise Vtable- oder duale Schnittstellen Ja AtlAdvise ist eine globale ATL-Funktion. CComPtrBase::Advise wird von CComPtr und CComQIPtr verwendet.
IDispEventSimpleImpl::D ispEventAdvise IDispEventSimpleImpl::D ispEventUnadvise IDispEventImpl oder IDispEventSimpleImpl Nein Weniger Parameter als AtlAdvise seit der Basisklasse mehr Arbeit leistet.
CComCompositeControl::AdviseSinkMap(TRUE) CComCompositeControl::AdviseSinkMap(FALSE) ActiveX-Steuerelemente in zusammengesetzten Steuerelementen Nein CComCompositeControl::AdviseSinkMap rät alle Einträge in der Ereignissenkenzuordnung. Die gleiche Funktion hebt die Einträge auf. Diese Methode wird automatisch von der CComCompositeControl Klasse aufgerufen.
CAxDialogImpl::AdviseSinkMap(TRUE) CAxDialogImpl::AdviseSinkMap(FALSE) ActiveX-Steuerelemente in einem Dialogfeld Nein CAxDialogImpl::AdviseSinkMap weist alle ActiveX-Steuerelemente in der Dialogressource auf und hebt sie auf. Dies erfolgt automatisch für Sie.

Siehe auch

Ereignisbehandlung
Unterstützen von IDispEventImpl