IConnectionPointContainer 사용
연결 가능한 개체는 IConnectionPointContainer 를 구현하고 QueryInterface를 통해 노출하여 나가는 인터페이스의 존재를 나타냅니다. 나가는 각 인터페이스에 대해 연결 가능한 개체는 IConnectionPoint를 구현하는 연결 지점 하위 개체를 관리합니다. 따라서 연결 가능한 개체에는 연결점이 포함되므로 IConnectionPointContainer 및 IConnectionPoint의 이름이 지정됩니다.
IConnectionPointContainer를 통해 클라이언트는 두 가지 작업을 수행할 수 있습니다. 먼저 클라이언트에 지원하는 나가는 인터페이스에 대한 IID가 이미 있는 경우 IConnectionPointContainer::FindConnectionPoint를 사용하여 IID에 해당하는 연결점을 찾을 수 있습니다. 클라이언트는 연결 가능한 개체와 포함된 연결 지점 간의 컨테이너/포함된 관계 때문에 연결점을 직접 쿼리할 수 없습니다. 기본적으로 FindConnectionPoint 는 IID가 클라이언트에 알려진 경우 나가는 인터페이스에 대한 QueryInterface 입니다.
둘째, 클라이언트는 IConnectionPointContainer::EnumConnectionPoints를 통해 연결 가능한 개체 내의 모든 연결점을 열거할 수 있습니다. 이 메서드는 별도의 열거자 개체에 대한 IEnumConnectionPoints 인터페이스 포인터를 반환합니다. IEnumConnectionPoints::Next를 통해 클라이언트는 각 연결 지점에 대한 IConnectionPoint 인터페이스 포인터를 가져올 수 있습니다.
클라이언트가 IConnectionPoint 인터페이스를 가져온 후 IConnectionPoint::GetConnectionInterface 를 호출하여 각 연결 지점에서 지원하는 나가는 인터페이스의 IID를 결정해야 합니다. 클라이언트가 이미 나가는 인터페이스를 지원하는 경우 연결을 설정할 수 있습니다. 그렇지 않으면 연결 가능한 개체의 형식 라이브러리 정보를 사용하여 런타임에 지원을 제공하여 나가는 인터페이스를 계속 지원할 수 있습니다. 이 기술을 사용하려면 연결 가능한 개체가 IProvideClassInfo 인터페이스를 지원해야 합니다. ( IProvideClassInfo 사용을 참조하세요.)
열거자는 별도의 개체이므로 열거자가 더 이상 필요하지 않은 경우 클라이언트 는 IEnumConnectionPoints::Release 를 호출해야 합니다. 또한 각 연결 지점은 포함된 연결 가능한 개체와 별도의 참조 횟수가 있는 개체입니다. 따라서 클라이언트는 열거자 또는 FindConnectionPoint를 통해 액세스하는 각 연결 지점에 대해 IConnectionPoint::Release를 호출해야 합니다.
관련 항목