개체에 연결 지점 추가
ATL 자습서에서는 연결 지점을 지원하는 컨트롤을 만드는 방법, 이벤트를 추가하는 방법 및 연결 지점을 구현하는 방법을 보여 줍니다. ATL은 IConnectionPointImpl 클래스를 사용하여 연결점을 구현합니다.
연결점을 구현하려면 다음 두 가지 선택 사항이 있습니다.
컨트롤 또는 개체에 연결점을 추가하여 나가는 이벤트 원본을 직접 구현합니다.
다른 형식 라이브러리에 정의된 연결점 인터페이스를 다시 사용합니다.
두 경우 모두 연결점 구현 마법사는 형식 라이브러리를 사용하여 작업을 수행합니다.
컨트롤 또는 개체에 연결점을 추가하려면
.idl 파일의 라이브러리 블록에서 dispinterface를 정의합니다. ATL 컨트롤 마법사를 사용하여 컨트롤을 만들 때 연결점에 대한 지원을 사용하도록 설정한 경우 dispinterface가 이미 만들어집니다. 컨트롤을 만들 때 연결 지점에 대한 지원을 사용하도록 설정하지 않은 경우 .idl 파일에 dispinterface를 수동으로 추가해야 합니다. 다음은 dispinterface의 예입니다. 나가는 인터페이스는 디스패치 인터페이스일 필요는 없지만 VBScript 및 JScript와 같은 많은 스크립팅 언어에는 이 작업이 필요하므로 이 예제에서는 두 개의 dispinterface를 사용합니다.
[ uuid(3233E37D-BCC0-4871-B277-48AE6B61224A), helpstring("Buddy Events") ] dispinterface DBuddyEvents { properties: methods: };
uuidgen.exe 또는 guidgen.exe 유틸리티를 사용하여 GUID를 생성합니다.
프로젝트의 .idl 파일에서 개체에 대한 coclass의 인터페이스로
[default,source]
dispinterface를 추가합니다. 다시 말하지만, 컨트롤을 만들 때 연결점에 대한 지원을 사용하도록 설정한 경우 ATL 컨트롤 마법사에서 ] 항목을 만듭니[default,source
다. 이 항목을 수동으로 추가하려면 굵게 줄을 추가합니다.coclass Buddy { [default] interface IBuddy; [default,source] dispinterface DBuddyEvents; };
예제는 Circ ATL 샘플의 .idl 파일을 참조하세요.
클래스 뷰를 사용하여 이벤트 인터페이스에 메서드 및 속성을 추가합니다. 클래스 뷰에서 클래스를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 추가를 가리킨 다음 연결점 추가를 클릭합니다.
연결점 구현 마법사의 원본 인터페이스 목록 상자에서 프로젝트의 인터페이스를 선택합니다. 컨트롤에 대한 인터페이스를 선택하고 확인을 누르면 다음을 수행합니다.
이벤트에 대해 나가는 호출을 만드는 코드를 구현하는 이벤트 프록시 클래스를 사용하여 헤더 파일을 생성합니다.
연결점 맵에 항목을 추가합니다.
컴퓨터에 모든 형식 라이브러리의 목록도 표시됩니다. 다른 형식 라이브러리에서 찾은 것과 똑같은 나가는 인터페이스를 구현하려는 경우 이러한 다른 형식 라이브러리 중 하나만 사용하여 연결점을 정의해야 합니다.
다른 형식 라이브러리에 정의된 연결점 인터페이스를 다시 사용하려면
클래스 뷰에서 BEGIN_COM_MAP 매크로를 구현하는 클래스를 마우스 오른쪽 단추로 클릭하고 바로 가기 메뉴에서 추가를 가리킨 다음 연결점 추가를 클릭합니다.
연결점 구현 마법사에서 형식 라이브러리 및 형식 라이브러리의 인터페이스를 선택하고 추가를 클릭합니다.
.idl 파일을 다음 중 하나에 편집합니다.
이벤트 소스가 사용되는 개체의 .idl 파일에서 dispinterface를 복사합니다.
해당 형식 라이브러리에서 importlib 명령을 사용합니다.