다음을 통해 공유


연결점

(자동화 이전의 OLE 연결 지점으로) 연결 지점을 구현 하는 방법을 설명 하는 MFC 클래스를 사용 하 여 CCmdTargetCConnectionPoint.

과거에는 구성 요소 개체 모델 (COM) 일반 메커니즘을 정의 (IUnknown::QueryInterface)는 구현 하 고 인터페이스에서 기능을 노출 하는 개체를 허용 합니다.그러나 특정 인터페이스를 호출 하는 기능을 노출 하는 개체를 사용할 수 있는 해당 메커니즘 정의 되지 않았습니다.즉, COM 개체를 수신 하는 방법에 대 한 포인터를 정의 (해당 개체의 인터페이스에 대 한 포인터)를 처리 하는 있지만 나가는 인터페이스 (개체가 다른 개체의 인터페이스를 보유 하는 포인터)에 대 한 명시적인 모델이 없었습니다.COM 이제이 기능을 지 원하는 연결 지점 이라는 모델을 사용 합니다.

연결을 두 부분으로 이루어져 있습니다: 원본 및 인터페이스를 구현 하는 개체를 호출 하는 인터페이스를 호출 하는 개체는 싱크 라는.연결 지점 원본에 의해 노출 되는 인터페이스입니다.연결 지점을 제공 하 여 소스 싱크를 자체 (원본)에 대 한 연결을 설정할 수 있습니다.메커니즘을 통해 연결 지점 (의 IConnectionPoint 인터페이스), 싱크 인터페이스 포인터는 소스 개체에 전달 됩니다.This이 포인터는 소스와 싱크 구현 멤버 함수는 집합의 액세스를 제공합니다.예를 들어, 싱크에 의해 구현 된 이벤트를 발생 시키려면 소스 싱크 구현에서는 적절 한 메서드를 호출할 수 있습니다.다음 그림은 연결을 보여 줍니다. 방금 설명한 지점.

구현된 연결 지점

구현된 연결 지점

MFC는이 모델의 구현에 CConnectionPointCCmdTarget 클래스.파생 클래스에서 CConnectionPoint 구현에서 IConnectionPoint 인터페이스를 다른 개체에 연결 지점을 파악 하는 데 사용 합니다.파생 클래스에서 CCmdTarget 구현에서 IConnectionPointContainer 인터페이스를 모든 개체의 사용 가능한 연결 지점 열거 또는 특정 연결 지점을 찾을 수 있습니다.

클래스에서 구현 된 각 연결 지점에 대 한 연결 지점을 구현 하는 연결 부분을 선언 해야 합니다.하나 이상의 연결 지점을 구현 하는 경우 클래스에 단일 연결 맵도 선언 해야 합니다.연결 맵에 테이블 ActiveX 컨트롤에서 지 원하는 연결 지점입니다.

다음 예제는 단순한 연결 맵과 한 개의 연결 지점을 보여 줍니다.첫 번째 예제는 연결 맵과 연결 지점을 선언합니다. 두 번째 예제는 맵과 연결 지점을 구현합니다.참고 CMyClass 여야 합니다는 CCmdTarget-클래스를 파생 합니다.첫 번째 예제에서는 코드 클래스 선언에서 아래 삽입 되는 보호 된 섹션:

class CMyClass : public CCmdTarget
{
protected:
   // Connection point for ISample interface
    BEGIN_CONNECTION_PART(CMyClass, SampleConnPt)
        CONNECTION_IID(IID_ISampleSink)
    END_CONNECTION_PART(SampleConnPt)

    DECLARE_CONNECTION_MAP()

BEGIN_CONNECTION_PARTEND_CONNECTION_PART 매크로 포함된 하는 클래스를 선언 합니다. XSampleConnPt (파생 CConnectionPoint)이 특정 연결 구현을 가리킨 것입니다.재정의 하려는 경우 CConnectionPoint 멤버 함수 또는 멤버 함수를 직접 추가, 이러한 두 매크로가 간에를 선언 합니다.예를 들어,는 CONNECTION_IID 매크로 재정의 CConnectionPoint::GetIID 때 이러한 두 매크로가 사이의 멤버 함수입니다.

두 번째 예제에서 코드는 컨트롤 구현 파일 (.cpp 파일)에 삽입 됩니다.이 코드는 연결점을 포함 한 연결 지도 구현 SampleConnPt:

BEGIN_CONNECTION_MAP(CMyClass, CCmdTarget)
    CONNECTION_PART(CMyClass, IID_ISampleSink, SampleConnPt)
END_CONNECTION_MAP()

클래스 추가 삽입을 가리킨 연결이 둘 이상 있는 경우 CONNECTION_PART 매크로 사이 BEGIN_CONNECTION_MAPEND_CONNECTION_MAP 매크로.

마지막으로 호출을 추가 EnableConnections 클래스의 생성자입니다.예를 들면 다음과 같습니다.

CMyClass::CMyClass()
{
   EnableConnections();
}

이 코드를 삽입 한 후에 CCmdTarget-파생된 클래스에 대 한 연결 지점을 노출의 ISampleSink 인터페이스.다음 그림은이 예제를 보여 줍니다.

MFC로 구현 된 연결 지점

연결 지점 구현 MFC

일반적으로 "멀티 캐스팅" 연결점을 지원-여러 싱크에 브로드캐스트하는 기능이 동일한 인터페이스에 연결 합니다.다음 예제 코드를 보여 줍니다. 각 연결점에 싱크를 반복 하 여 멀티 캐스트 방법:

void CMyClass::CallSinkFunc()
{
    POSITION pos = m_xSampleConnPt.GetStartPosition();
    ISampleSink* pSampleSink;
    while( pos != NULL )
    {
        pSampleSink = (ISampleSink*)(m_xSampleConnPt.GetNextConnection(pos));
        if(pSampleSink != NULL)
            pSampleSink->SinkFunc();
    }
}

연결의 현재 집합을 검색 하는이 예제는 SampleConnPt 호출로 연결 지점 CConnectionPoint::GetConnections.연결 및 호출을 다음 반복 ISampleSink::SinkFunc 의 모든 활성 연결이 있습니다.

참고 항목

개념

MFC COM