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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für