ATL 이벤트 처리 요약
일반적으로 COM 이벤트 처리는 비교적 간단한 프로세스입니다. 세 가지 주요 단계가 있습니다.
개체에 이벤트 인터페이스를 구현합니다.
개체가 이벤트를 수신하도록 이벤트 원본에 알려 줍니다.
개체가 더 이상 이벤트를 수신할 필요가 없는 경우 이벤트 원본을 프로비전 해제합니다.
인터페이스 구현
ATL을 사용하여 인터페이스를 구현하는 네 가지 주요 방법이 있습니다.
에서 파생 | 인터페이스 형식에 적합 | 모든 메서드를 구현해야 합니다* | 런타임에 형식 라이브러리 필요 |
---|---|---|---|
인터페이스 | Vtable | 예 | 아니요 |
IDispatchImpl | 이중 | 예 | 예 |
IDispEventImpl | Dispinterface | 예 | 예 |
IDispEventSimpleImpl | Dispinterface | 아니요 | 아니요 |
* ATL 지원 클래스를 사용하는 경우 수동으로 또는 IDispatch
메서드를 IUnknown
구현할 필요가 없습니다.
이벤트 원본에 대한 조언 및 취소
ATL을 사용하여 이벤트 원본을 조언하고 프로비전 해제하는 세 가지 주요 방법이 있습니다.
Advise 함수 | Unadvise 함수 | 와 함께 사용하기에 가장 적합합니다. | 쿠키를 추적해야 합니다. | 설명 |
---|---|---|---|---|
AtlAdvise, CComPtrBase::Advise | AtlUnadvise | Vtable 또는 이중 인터페이스 | 예 | AtlAdvise 는 전역 ATL 함수입니다. CComPtrBase::Advise 는 CComPtr 및 CComQIPtr에서 사용됩니다. |
IDispEventSimpleImpl::D ispEventAdvise | IDispEventSimpleImpl::D ispEventUnadvise | IDispEventImpl 또는 IDispEventSimpleImpl | 아니요 | 기본 클래스가 더 많은 작업을 수행하기 때문에 매개 AtlAdvise 변수 수가 적습니다. |
CComCompositeControl::AdviseSinkMap(TRUE) | CComCompositeControl::AdviseSinkMap(FALSE) | 복합 컨트롤의 ActiveX 컨트롤 | 아니요 | CComCompositeControl::AdviseSinkMap 는 이벤트 싱크 맵의 모든 항목을 조언합니다. 동일한 함수가 항목을 수정하지 않습니다. 이 메서드는 클래스에서 자동으로 호출됩니다 CComCompositeControl . |
CAxDialogImpl::AdviseSinkMap(TRUE) | CAxDialogImpl::AdviseSinkMap(FALSE) | 대화 상자의 ActiveX 컨트롤 | 아니요 | CAxDialogImpl::AdviseSinkMap 는 대화 상자 리소스의 모든 ActiveX 컨트롤을 조언하고 프로비전 해제합니다. 이 작업은 자동으로 수행됩니다. |