다음을 통해 공유


Supporting IDispEventImpl

템플릿 클래스 IDispEventImpl ATL 클래스에 연결 지점 싱크를 지원 하기 위해 사용할 수 있습니다. 연결 지점 싱크 클래스를 외부 COM 개체에서 발생 하는 이벤트를 처리할 수 있습니다. 이러한 연결 지점 싱크는 클래스가 제공 하는 이벤트 싱크 맵을 함께 매핑됩니다.

클래스에는 연결 지점 싱크를 제대로 구현 하려면 다음 단계를 완료 합니다.

  • 각 외부 개체에 대 한 형식 라이브러리 가져오기

  • 선언 된 IDispEventImpl 인터페이스

  • 하는 이벤트 싱크 맵을 선언 합니다.

  • 싱 및 연결점 싱

연결 지점 싱크 구현에 관련 된 단계를 통해 모든 헤더 파일 (.h)의 클래스를 수정 하 여 수행할 수 있습니다.

형식 라이브러리 가져오기

이벤트를 처리 하려는 각 외부 개체에 대 한 형식 라이브러리를 가져와야 합니다. 이 단계는 처리할 수 있는 이벤트를 정의 및 이벤트 싱크 맵을 선언할 때 사용 되는 정보를 제공 합니다. # Import 지시문을 사용 하 여이 작업을 수행 합니다. 필요한 추가 #import 지시문 줄 각각의 디스패치 인터페이스 클래스 헤더 파일 (.h)에 지원 됩니다.

다음 예제에서는 외부 COM 서버의 형식 라이브러리 가져오기 (MSCAL.Calendar.7).

#import "PROGID:MSCAL.Calendar.7" no_namespace, raw_interfaces_only

참고

별도 있어야 #import 를 지원할 각 외부 형식 라이브러리에 대 한 문의.

IDispEventImpl 인터페이스 선언

각 디스패치 인터페이스의 형식 라이브러리를 가져온 했으므로 별도 선언 해야 IDispEventImpl 각 외부 디스패치 인터페이스에 대해 인터페이스. 클래스 선언을 추가 하 여 수정 된 IDispEventImpl 인터페이스를 선언 하는 각 외부 개체에 대 한. 매개 변수에 대 한 자세한 내용은 참조 하십시오. IDispEventImpl.

에 대 한 두 연결 지점 싱크를 선언 하는 다음 코드는 DCalendarEvents 인터페이스 클래스에 의해 구현 되는 COM 개체에 대 한 CMyCompositCtrl2.

public IDispEventImpl<IDC_CALENDAR1, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>,
public IDispEventImpl<IDC_CALENDAR2, CMyCompositCtrl2, &__uuidof(DCalendarEvents), &__uuidof(__MSACAL), 7, 0>

하는 이벤트 싱크 맵을 선언합니다.

적절 한 함수에 의해 처리 되는 이벤트 알림을 순서로 클래스 각 이벤트를 올바른 처리기로 경로 설정 해야 합니다. 이 이벤트 싱크 맵을 선언 하 여 수행할 수 있습니다.

ATL 여러 매크로 제공 합니다. BEGIN_SINK_MAP, END_SINK_MAP, 및 SINK_ENTRY_EX, 하이 매핑을 쉽게. 표준 형식은 다음과 같습니다.

BEGIN_SINK_MAP(comClass)

SINK_ENTRY_EX(id, iid, dispid, func)

. . . //additional external event entries

END_SINK_MAP()

다음 예제에서는 두 명의 이벤트 처리기에는 이벤트 싱크 맵을 선언합니다.

BEGIN_SINK_MAP(CMyCompositCtrl2)
   //Make sure the Event Handlers have __stdcall calling convention
   SINK_ENTRY_EX(IDC_CALENDAR1, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar1)
   SINK_ENTRY_EX(IDC_CALENDAR2, __uuidof(DCalendarEvents), DISPID_CLICK, 
      &CMyCompositCtrl2::ClickCalendar2)
END_SINK_MAP()

구현이 거의 완료 되었습니다. 마지막 단계는 싱 및 외부 인터페이스의 바이 관련이 있습니다.

싱 및 바이 IDispEventImpl 인터페이스

최종 단계 적당 한 시기에 권고 (싱 모든 연결점 이나 됩니다) 메서드를 구현 하는 것입니다. 이 싱 외부 클라이언트와 개체 사이 통신을 수행 하기 전에 수행 되어야 합니다. 개체를 표시 하기 전에 해당 개체에서 지 원하는 각 외부 디스패치 인터페이스에 대 한 나가는 인터페이스 쿼리 됩니다. 연결이 설정 되 고 나가는 인터페이스에 대 한 참조 개체에서 이벤트를 처리 하는. 이 절차를 "라는 이름으로." 라고

개체를 외부 인터페이스로 완료 되 면 송신 인터페이스는 클래스에 의해 더 이상 사용 되지 알려야 합니다. 이 프로세스를 "바이로." 라고

COM 개체의 고유한 특성으로 인해이 절차 세부 및 실행 구현 간의 다릅니다. 이러한 세부 정보는이 항목에서 다루지 않습니다 및 해결 하지.

참고 항목

참조

Fundamentals of ATL COM Objects