연결 맵
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
입니다. 이 값은 연결 끊을 때 매개 변수 AfxConnectionUnadvise
로 dwCookie
전달되어야 합니다.
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