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 컨트롤을 조언하고 프로비전 해제합니다. 이 작업은 자동으로 수행됩니다.

참고 항목

이벤트 처리
IDispEventImpl 지원