Zusammenfassung der ATL-Ereignisbehandlung
Im Allgemeinen ist die Behandlung von COM-Ereignissen ein relativ einfacher Prozess. Es gibt drei Hauptschritte:
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 Hauptmethoden für die Implementierung einer Schnittstelle mit ATL.
Ableiten von | Geeignet für Schnittstellentyp | Erfordert, dass Sie alle Methoden implementieren* | Erfordert zur Laufzeit eine Typbibliothek. |
---|---|---|---|
-Schnittstelle | Vtable | Ja | No |
IDispatchImpl | Dual | Ja | Ja |
IDispEventImpl | Disp-Schnittstelle | No | Ja |
IDispEventSimpleImpl | Disp-Schnittstelle | No | No |
* Wenn Sie ATL-Supportklassen verwenden, müssen Sie die IUnknown
Methoden IDispatch
nie manuell implementieren.
Beratung und Unadvising der Ereignisquelle
Es gibt drei Hauptmethoden zum Beraten und Aufheben der Veröffentlichung einer Ereignisquelle mithilfe von ATL.
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 | No | Weniger Parameter als AtlAdvise seit der Basisklasse mehr Arbeit leistet. |
CComCompositeControl::AdviseSinkMap(TRUE) | CComCompositeControl::AdviseSinkMap(FALSE) | ActiveX-Steuerelemente in zusammengesetzten Steuerelementen | No | 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 | No | CAxDialogImpl::AdviseSinkMap weist alle ActiveX-Steuerelemente in der Dialogressource auf und hebt sie auf. Dies erfolgt automatisch für Sie. |