다음을 통해 공유


연결 맵

OLE 컨트롤은 인터페이스를 다른 애플리케이션에 노출할 수 있습니다. 이러한 인터페이스는 컨테이너에서 해당 컨트롤로의 액세스만 허용합니다. OLE 컨트롤이 다른 OLE 개체의 외부 인터페이스에 액세스하려는 경우 연결점을 설정해야 합니다. 이 연결점을 사용하면 이벤트 맵 또는 알림 함수와 같은 외부 디스패치 맵에 대한 제어 나가는 액세스를 허용합니다.

Microsoft Foundation 클래스 라이브러리는 연결점을 지원하는 프로그래밍 모델을 제공합니다. 이 모델에서 "연결 맵"은 OLE 컨트롤의 인터페이스 또는 연결점을 지정하는 데 사용됩니다. 연결 맵에는 각 연결 지점에 대해 하나의 매크로가 포함되어 있습니다. 연결 맵에 대한 자세한 내용은 클래스를 참조하세요 CConnectionPoint .

일반적으로 컨트롤은 두 개의 연결 지점만 지원합니다. 하나는 이벤트용이고 다른 하나는 속성 알림용입니다. 이는 기본 클래스에 COleControl 의해 구현되며 컨트롤 작성기에서 추가 작업이 필요하지 않습니다. 클래스에서 구현하려는 다른 연결점을 수동으로 추가해야 합니다. 연결 맵 및 지점을 지원하기 위해 MFC는 다음 매크로를 제공합니다.

연결 맵 선언 및 경계

속성 설명
BEGIN_CONNECTION_PART 추가 연결점을 구현하는 포함된 클래스를 선언합니다(클래스 선언에서 사용해야 합니다).
END_CONNECTION_PART 연결점 선언을 종료합니다(클래스 선언에 사용해야 합니다).
CONNECTION_IID 컨트롤 연결 지점의 인터페이스 ID를 지정합니다.
DECLARE_CONNECTION_MAP 클래스에서 연결 맵이 사용되도록 선언합니다(클래스 선언에서 사용해야 합니다).
BEGIN_CONNECTION_MAP 연결 맵의 정의를 시작합니다(클래스 구현에서 사용해야 합니다).
END_CONNECTION_MAP 연결 맵의 정의를 종료합니다(클래스 구현에서 사용해야 합니다).
CONNECTION_PART 컨트롤의 연결 맵에 연결점을 지정합니다.

다음 함수는 싱크가 연결 지점을 사용하여 연결을 설정하고 연결을 끊는 데 도움이 됩니다.

연결 지점 초기화/종료

속성 설명
AfxConnectionAdvise 원본과 싱크 간에 연결을 설정합니다.
AfxConnectionUnadvise 원본과 싱크 간의 연결을 끊습니다.

BEGIN_CONNECTION_PART

매크로를 BEGIN_CONNECTION_PART 사용하여 이벤트 및 속성 알림 연결 지점 이외의 추가 연결점 정의를 시작합니다.

BEGIN_CONNECTION_PART(theClass, localClass)

매개 변수

theClass 연결점이 있는 컨트롤 클래스의 이름을 지정합니다.

localClass 연결점을 구현하는 로컬 클래스의 이름을 지정합니다.

설명

클래스의 멤버 함수를 정의하는 선언(.h) 파일에서 매크로를 BEGIN_CONNECTION_PART 사용하여 연결점을 시작합니다. 그런 다음 매크로 및 구현하려는 다른 멤버 함수를 추가 CONNECTION_IID 합니다. 마지막으로 매크로를 사용하여 연결점 맵을 완료합니다 END_CONNECTION_PART .

요구 사항

머리글 afxdisp.h

END_CONNECTION_PART

연결 지점의 선언을 종료합니다.

END_CONNECTION_PART(localClass)

매개 변수

localClass
연결 지점을 구현하는 로컬 클래스의 이름을 지정합니다.

요구 사항

머리글 afxdisp.h

CONNECTION_IID

매크로와 END_CONNECTION_PART 매크로를 사용하여 BEGIN_CONNECTION_PART OLE 컨트롤에서 지원하는 연결점에 대한 인터페이스 ID를 정의합니다.

CONNECTION_IID(iid)

매개 변수

iid
연결점에서 호출하는 인터페이스의 인터페이스 ID입니다.

설명

인수는 iid 연결 지점이 연결된 싱크에서 호출하는 인터페이스를 식별하는 데 사용되는 인터페이스 ID입니다. 예시:

CONNECTION_IID(IID_ISampleSink)

인터페이스를 호출하는 연결점을 지정합니다 ISinkInterface .

요구 사항

머리글 afxdisp.h

DECLARE_CONNECTION_MAP

프로그램의 각 COleControl파생 클래스는 컨트롤이 지원하는 추가 연결 지점을 지정하는 연결 맵을 제공할 수 있습니다.

DECLARE_CONNECTION_MAP()

설명

컨트롤이 추가 지점을 지원하는 경우 클래스 선언의 끝에 있는 매크로를 사용합니다 DECLARE_CONNECTION_MAP . 그런 다음 클래스의 멤버 함수를 정의하는 .cpp 파일에서 매크로, CONNECTION_PART 컨트롤의 각 연결점에 대한 매크로 및 END_CONNECTION_MAP 매크로를 사용하여 BEGIN_CONNECTION_MAP 연결 맵의 끝을 선언합니다.

요구 사항

머리글 afxdisp.h

BEGIN_CONNECTION_MAP

프로그램에서 각 COleControl 파생 클래스는 컨트롤을 지원하는 연결 포인트를 지정하기 위해 연결 맵을 제공할 수 있습니다.

BEGIN_CONNECTION_MAP(theClass, theBase)

매개 변수

theClass
이 연결을 매핑할 컨트롤 클래스의 이름을 지정합니다.

theBase
기본 클래스 theClass의 이름을 지정합니다.

설명

클래스의 멤버 함수를 정의하는 구현(.CPP) 파일에서 매크로를 사용하여 연결 맵을 BEGIN_CONNECTION_MAP 시작한 다음 매크로를 사용하여 CONNECTION_PART 각 연결 지점에 대한 매크로 항목을 추가합니다. 마지막으로 매크로를 사용하여 연결 맵을 완료합니다 END_CONNECTION_MAP .

요구 사항

머리글 afxdisp.h

END_CONNECTION_MAP

연결 맵의 정의를 끝냅니다.

END_CONNECTION_MAP()

요구 사항

머리글 afxdisp.h

CONNECTION_PART

OLE 컨트롤의 연결점을 특정 인터페이스 ID에 매핑합니다.

CONNECTION_PART(theClass, iid, localClass)

매개 변수

theClass
연결점이 있는 컨트롤 클래스의 이름을 지정합니다.

iid
연결점에서 호출하는 인터페이스의 인터페이스 ID입니다.

localClass
연결 지점을 구현하는 로컬 클래스의 이름을 지정합니다.

설명

예시:

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

는 인터페이스를 호출하는 연결 지점을 사용하여 연결 맵을 구현합니다 IID_ISinkInterface .

요구 사항

머리글 afxdisp.h

AfxConnectionAdvise

이 함수를 호출하여 지정된 원본 pUnkSrc과 지정된 싱크 pUnkSink간에 연결을 설정합니다.

BOOL AFXAPI AfxConnectionAdvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD FAR* pdwCookie);

매개 변수

pUnkSrc
인터페이스를 호출하는 개체에 대한 포인터입니다.

pUnkSink
인터페이스를 구현하는 개체에 대한 포인터입니다.

iid
연결의 인터페이스 ID입니다.

bRefCount
Out-of-process 연결의 경우 이 매개 변수는 여야 TRUE하며 연결을 만들면 참조 수가 pUnkSink 증가해야 임을 나타냅니다.

In-Process 연결의 TRUE 경우 연결을 만들면 참조 수가 pUnkSink 증가해야 하므로 FALSE 는 참조 수를 증가해서는 안 됨을 나타냅니다.

경고: 일반적으로 어떤 연결이 처리 중이고 어떤 연결이 처리되지 않는지 예측할 수 없으므로 항상 이 매개 변수를 TRUE로 설정하는 것이 좋습니다.

pdwCookie
연결 식별자가 반환되는 위치에 대한 포인터 DWORD 입니다. 이 값은 연결 끊을 때 매개 변수 AfxConnectionUnadvisedwCookie 전달되어야 합니다.

Return Value

연결이 설정된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

예시

//CMySink is a CCmdTarget-derived class supporting automation.
//Instantiate the sink class.
CMySink mysink;

//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Establish a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a cookie identifying the connection, and is needed
//to terminate this connection.
AfxConnectionAdvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, &dwCookie);

요구 사항

머리글: afxctl.h

AfxConnectionUnadvise

이 함수를 호출하여 지정된 원본 pUnkSrc과 지정된 싱크 pUnkSink간의 연결을 끊습니다.

BOOL AFXAPI AfxConnectionUnadvise(
    LPUNKNOWN pUnkSrc,
    REFIID iid,
    LPUNKNOWN pUnkSink,
    BOOL bRefCount,
    DWORD dwCookie);

매개 변수

pUnkSrc
인터페이스를 호출하는 개체에 대한 포인터입니다.

pUnkSink
인터페이스를 구현하는 개체에 대한 포인터입니다.

iid
연결점 인터페이스의 인터페이스 ID입니다.

bRefCount
Out-of-process 연결의 경우 이 매개 변수는 반드시 연결이어야 TRUE하며 연결을 만들면 참조 수가 pUnkSink 감소해야 임을 나타냅니다.

In-Process 연결의 TRUE 경우 연결을 만들면 참조 수가 pUnkSink 감소해야 임을 나타냅니다. FALSE 는 참조 수를 줄여서는 안 됨을 나타냅니다.

경고: 일반적으로 어떤 연결이 처리 중이고 어떤 연결이 처리되지 않는지 예측할 수 없으므로 항상 이 매개 변수를 TRUE로 설정하는 것이 좋습니다.

dwCookie
에서 반환한 AfxConnectionAdvise연결 식별자입니다.

반환 값

연결이 끊어진 경우 0이 아닌 경우 그렇지 않으면 0입니다.

예시

//mysink is a CCmdTarget-derived class supporting automation.
//Get a pointer to sink's IUnknown, no AddRef done.
IID iid = IID_IUnknown;
IUnknown* pUnkSink = mysink.GetInterface(&iid);

//Terminate a connection between source and sink.
//pUnkSrc is IUnknown of server obtained by CoCreateInstance().
//dwCookie is a value obtained through AfxConnectionAdvise().
AfxConnectionUnadvise(pUnkSrc, IID_ISampleSink, pUnkSink, FALSE, dwCookie);

요구 사항

머리글: afxctl.h

참고 항목

매크로 및 전역