IDispEventImpl 사용 방법 소개

2858 단어 서버과업events

IDispEventImpl 지원


템플릿 클래스 IDispEventImpl은 ATL 클래스에서 연결점 수신기 지원을 제공하는 데 사용됩니다.연결점 수신기는 클래스가 외부 COM 대상에서 발생하는 사건을 처리할 수 있도록 합니다.이 연결점 수신기는 이벤트 수신 매핑 (클래스에서 제공) 으로 매핑됩니다.
클래스의 연결 포인트 수신기를 올바르게 구현하려면 다음 단계를 완료해야 합니다.
  • 각 외부 객체에 대한 유형 라이브러리 가져오기
  • IDispEventImpl 커넥터
  • 선언
  • 선언 이벤트 수신 매핑
  • 연결 지점 알림 및 취소
  • 연결점 수신기를 실현하는 절차는 클래스의 헤더 파일 (.h) 수정을 통해서만 이루어진다.

    유형 라이브러리 가져오기


    이벤트를 처리하고자 하는 모든 외부 대상에 대해 형식 라이브러리를 가져와야 합니다.이 단계는 처리할 이벤트를 정의하고 이벤트가 맵을 받을 때 사용할 정보를 제공합니다.#import 명령을 사용하여 이 작업을 완료할 수 있습니다.클래스의 헤더 파일 (.h) 에 지원할 스케줄링 인터페이스마다 필요한 #import 명령줄을 추가합니다.
    다음 예제에서는 외부 COM 서버MyServer의 유형 라이브러리를 가져옵니다.
    #import "D://MyServer.dll" raw_interfaces_only, no_namespace, named_guids

    지원할 외부 형식 라이브러리마다 별도의
    #import 문

    IDispEventImpl 인터페이스 선언


    모든 스케줄링 인터페이스의 형식 라이브러리를 가져왔습니다. 현재 외부 스케줄링 인터페이스마다 IDispEventImpl 인터페이스를 설명해야 합니다.클래스 선언을 수정하고 각 외부 객체에 대한 IDispEventImpl 인터페이스 선언을 추가합니다.매개변수에 대한 자세한 내용은 IDispEventImpl 을 참조하십시오.
    다음 코드는 두 개의 연결점 수신기, 사용자 정의IExtEvents1IExtEvents2 인터페이스, CMyObj 클래스 구현에 사용되는COM 대상을 설명합니다.
    public IDispEventImpl<0, CMyObj, &DIID__IExtEvents1,
        &LIBID_EXTEVENTS1Lib, 1, 0>,
    public IDispEventImpl<1, CMyObj, &DIID__IExtEvents2,
        &LIBID_EXTEVENTS2Lib, 1, 0>

    선언 이벤트 수신 매핑


    이벤트 알림을 정확한 함수로 처리하기 위해서 클래스는 모든 이벤트를 정확한 처리 프로그램에 연결해야 합니다.이 점은 하나의 이벤트 수신 맵을 성명함으로써 실현된다.
    ATL은 이 매핑을 더 쉽게 만드는 몇 가지 매크로를 제공합니다. BEGINSINK_MAP、END_SINK_MAP 및 SINKENTRY.표준 형식은 다음과 같습니다.
    BEGIN_SINK_MAP(comClass)
       SINK_ENTRY(id, dispid, func)
       . . . //additional external event entries
    END_SINK_MAP()

    다음 예제에서는 두 개의 이벤트 프로세서를 사용하여 하나의 이벤트 수신 매핑을 선언합니다.
    BEGIN_SINK_MAP(CMyObj)
       SINK_ENTRY(0, Events1, OnClick1)
       SINK_ENTRY(0, Events2, OnClick2)
    END_SINK_MAP()

    실현이 거의 완성되었다.마지막 단계는 알림과 취소 알림 외부 인터페이스와 관련이 있습니다.

    알림 및 취소 알림 IDispEventImpl 인터페이스


    마지막 단계는 적당한 시간에 모든 연결점을 통지하거나 취소하는 방법을 실현하는 것이다.외부 클라이언트와 대상 간의 통신이 발생하기 전에 이 알림을 완성해야 합니다.대상이 보이기 전에 대상이 지원하는 모든 외부 스케줄링 인터페이스에 출력 인터페이스를 조회합니다.연결을 만들고 출력 인터페이스에 대한 인용을 사용하여 대상의 이벤트를 처리합니다.이 프로세스를 공지라고 합니다.
    대상이 외부 인터페이스를 사용한 후에 출력 인터페이스가 클래스에서 사용되지 않는다는 것을 알려야 합니다.이 프로세스를 "알림 취소"라고 합니다.
    COM 대상의 독특한 특성 때문에 이 과정의 구체적인 세부 사항과 집행은 실현에 따라 다르다.이 세부 사항들은 본 주제의 범위를 넘어서 토론하지 않는다
    [전재 출처]http://technet.microsoft.com/zh-cn/office/cc485263(VS.71).aspx
    【SINK_ENTRY_INFO】http://technet.microsoft.com/zh-cn/library/2wt7d0s4(v=vs.110).aspx
    【ATL COM 대상 기초 지식】http://technet.microsoft.com/zh-cn/office/cc451370(v=vs.71)

    좋은 웹페이지 즐겨찾기