다음을 통해 공유


COM 이벤트

업데이트: 2007년 11월

이 항목에서는 연결 지점 개요를 제공하고 COM 이벤트를 설명하기 위해 자주 사용되는 이벤트 관련 용어를 소개합니다.

연결 지점은 COM에서 클라이언트와 서버 간의 양방향 통신을 설정합니다. 이 메커니즘을 사용하면 일부 이벤트가 발생하는 경우 COM 서버에서 클라이언트를 다시 호출할 수 있습니다. 예를 들어 서버(예: Microsoft Internet Explorer)는 클라이언트 프로그램에 대한 변경 내용(예: 제목 변경)을 보고하기 위해 이벤트를 발생시킬 수 있습니다. 클라이언트는 이벤트 싱크라는 내부 COM 개체를 만들어 들어오는 알림에 대비합니다. 클라이언트는 알림을 받으면 이벤트와 관련된 작업을 수행할 수 있습니다.

이벤트 싱크는 이벤트 관련 메서드를 노출하기 위해 서버에 인터페이스를 제공합니다. 서버는 이러한 이벤트 관련 메서드를 호출하여 이벤트를 발생시킵니다. 클라이언트는 이벤트 싱크 인터페이스를 표준 COM 인터페이스로 구현합니다. 서버는 인터페이스를 보내기 인터페이스로 선언하고 COM 서버 작성자는 COM 서버의 형식 라이브러리에서 source 특성을 인터페이스에 적용합니다. 서버는 이벤트 싱크 인터페이스의 정의를 사용하여 sinkinvoke 메서드를 식별합니다.

이벤트 싱크 인터페이스를 구현하는 COM 클라이언트를 이벤트 싱크 또는 간단히 싱크라고도 합니다. 다음 그림에서 싱크는 ISinkEvents 인터페이스를 구현합니다. 이벤트를 발생시키는 서버를 소스라고 합니다.

연결 지점 이벤트 모델

COM 이벤트

이벤트 싱크 인터페이스를 설정한 후에는 싱크를 소스에 연결해야 합니다. 연결 지점 메커니즘은 다음 프로토콜을 사용하여 싱크와 소스를 서로 연결합니다.

  1. 싱크는 IConnectionPointContainer 인터페이스에 대해 서버 개체를 쿼리합니다. 개체가 연결 지점을 지원하면 포인터가 반환됩니다.

  2. 컨테이너 개체에서 메서드를 사용하면 싱크는 특정 연결 지점을 나타내는 IConnectionPoint 인터페이스를 찾습니다. 서버에서 다수의 보내기 인터페이스를 지원할 수 있으므로 클라이언트의 싱크와 특정 연결 지점 인터페이스의 IID(인터페이스 식별자)가 일치해야 합니다.

  3. 정확한 연결 지점 개체를 획득하면 싱크는 IConnectionPoint::Advise를 호출하여 싱크 인터페이스 포인터를 등록합니다. 서버(소스)는 클라이언트가 IConnectionPoint::Unadvise를 호출하여 연결을 끊을 때까지 연결을 유지하여 이벤트를 발생시킵니다.

Visual Basic은 대부분의 연결 지점 정보를 숨기지만 서버의 클라이언트 선언에 WithEvents 지시문을 포함해야 합니다. C++를 사용하는 경우 클라이언트 코드는 IConnectionPointContainerIConnectionPoint에서 메서드를 쿼리하고 호출해야 합니다. 서버는 두 인터페이스를 모두 구현합니다.

참고 항목

작업

방법: COM 싱크에서 처리하는 이벤트 발생

방법: COM 소스에서 발생하는 이벤트 처리

기타 리소스

관리되는 이벤트와 관리되지 않는 이벤트