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