디스패치 맵
OLE Automation은 메서드를 호출하고 애플리케이션의 속성에 액세스하는 방법을 제공합니다. 이러한 요청을 디스패치하기 위해 Microsoft Foundation 클래스 라이브러리에서 제공하는 메커니즘은 개체 함수 및 속성의 내부 및 외부 이름과 속성 자체 및 함수 인수의 데이터 형식을 지정하는 "디스패치 맵"입니다.
디스패치 맵 매크로 | 설명 |
---|---|
DECLARE_DISPATCH_MAP | 디스패치 맵을 사용하여 클래스의 메서드 및 속성을 노출하도록 선언합니다(클래스 선언에서 사용해야 합니다). |
BEGIN_DISPATCH_MAP | 디스패치 맵의 정의를 시작합니다. |
END_DISPATCH_MAP | 디스패치 맵의 정의를 종료합니다. |
DISP_FUNCTION | 디스패치 맵에서 OLE 자동화 함수를 정의하는 데 사용됩니다. |
DISP_PROPERTY | OLE 자동화 속성을 정의합니다. |
DISP_PROPERTY_EX | OLE 자동화 속성을 정의하고 Get 및 Set 함수의 이름을 지정합니다. |
DISP_PROPERTY_NOTIFY | 알림을 사용하여 OLE 자동화 속성을 정의합니다. |
DISP_PROPERTY_PARAM | 매개 변수를 사용하고 Get 및 Set 함수의 이름을 지정하는 OLE 자동화 속성을 정의합니다. |
DISP_DEFVALUE | 기존 속성을 개체의 기본값으로 만듭니다. |
프로그램에서 파생 클래스가 CCmdTarget
OLE Automation을 지원하는 경우 해당 클래스는 해당 메서드와 속성을 노출하는 디스패치 맵을 제공해야 합니다.
DECLARE_DISPATCH_MAP()
클래스 선언의 끝에 DECLARE_DISPATCH_MAP 매크로를 사용합니다. 그런 다음. 클래스의 멤버 함수를 정의하는 CPP 파일은 BEGIN_DISPATCH_MAP 매크로를 사용합니다. 그런 다음 각 클래스의 노출된 메서드 및 속성(DISP_FUNCTION, DISP_PROPERTY 등)에 대한 매크로 항목을 포함합니다. 마지막으로 END_DISPATCH_MAP 매크로를 사용합니다.
참고
DECLARE_DISPATCH_MAP 후에 멤버를 선언하는 경우 새 액세스 형식(public
또는private
protected
)을 지정해야 합니다.
애플리케이션 마법사 및 코드 마법사는 Automation 클래스를 만들고 디스패치 맵을 유지 관리하는 데 도움이 됩니다. 디스패치 맵에 대한 자세한 내용은 Automation 서버를 참조 하세요.
class CMyServerDoc : public COleServerDoc
{
DECLARE_DISPATCH_MAP()
// Remainder of class declaration omitted.
헤더: afxwin.h
디스패치 맵의 정의를 선언합니다.
BEGIN_DISPATCH_MAP(theClass, baseClass)
theClass
이 디스패치 맵을 소유하는 클래스의 이름을 지정합니다.
baseClass
Class의 기본 클래스 이름을 지정합니다.
클래스의 멤버 함수를 정의하는 구현(.cpp) 파일에서 BEGIN_DISPATCH_MAP 매크로를 사용하여 디스패치 맵을 시작하고, 각 디스패치 함수 및 속성에 대한 매크로 항목을 추가하고, END_DISPATCH_MAP 매크로를 사용하여 디스패치 맵을 완료합니다.
헤더: afxdisp.h
디스패치 맵의 정의를 종료합니다.
END_DISPATCH_MAP()
BEGIN_DISPATCH_MAP 함께 사용해야 합니다.
헤더: afxdisp.h
디스패치 맵에서 OLE 자동화 함수를 정의합니다.
DISP_FUNCTION(
theClass,
pszName,
pfnMember,
vtRetVal,
vtsParams)
theClass
클래스의 이름입니다.
pszName
함수의 외부 이름입니다.
pfnMember
멤버 함수의 이름입니다.
vtRetVal
함수의 반환 형식을 지정하는 값입니다.
vtsParams
함수의 매개 변수 목록을 지정하는 하나 이상의 상수에 대한 공백으로 구분된 목록입니다.
vtRetVal 인수는 VARTYPE 형식입니다. 이 인수에 사용할 수 있는 값은 열거형에서 VARENUM
가져옵니다.
기호 | 반환 형식 |
---|---|
VT_EMPTY | void |
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | DATE |
VT_BSTR | BSTR |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIANT |
VT_UNKNOWN | LPUNKNOWN |
vtsParams 인수는 상수에서 VTS_*
공백으로 구분된 값 목록입니다. 공백(쉼표 아님)으로 구분된 이러한 값 중 하나 이상이 함수의 매개 변수 목록을 지정합니다. 예를 들면 다음과 같습니다.
VTS_I2 VTS_PI2
는 짧은 정수와 짧은 정수에 대한 포인터가 포함된 목록을 지정합니다.
VTS_
상수와 그 의미는 다음과 같습니다.
기호 | 매개 변수 형식 |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_CY | const CY 또는 CY* |
VTS_DATE | DATE |
VTS_BSTR | LPCSTR |
VTS_DISPATCH | LPDISPATCH |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* 또는 VARIANT& |
VTS_UNKNOWN | LPUNKNOWN |
VTS_PI2 | 짧은* |
VTS_PI4 | 오래* |
VTS_PR4 | 뜨다* |
VTS_PR8 | 배* |
VTS_PCY | CY* |
VTS_PDATE | DATE* |
VTS_PBSTR | BSTR* |
VTS_PDISPATCH | LPDISPATCH* |
VTS_PSCODE | SCODE* |
VTS_PBOOL | BOOL* |
VTS_PVARIANT | VARIANT* |
VTS_PUNKNOWN | LPUNKNOWN* |
VTS_NONE | 매개 변수 없음 |
헤더: afxdisp.h
디스패치 맵에서 OLE 자동화 속성을 정의합니다.
DISP_PROPERTY(
theClass,
pszName,
memberName,
vtPropType)
theClass
클래스의 이름입니다.
pszName
속성의 외부 이름입니다.
memberName
속성이 저장되는 멤버 변수의 이름입니다.
vtPropType
속성의 형식을 지정하는 값입니다.
vtPropType 인수는 VARTYPE 형식입니다. 이 인수에 사용할 수 있는 값은 VARENUM 열거형에서 가져옵니다.
기호 | 속성 유형 |
---|---|
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | DATE |
VT_BSTR | CString |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIANT |
VT_UNKNOWN | LPUNKNOWN |
외부 클라이언트가 속성을 변경하면 memberName에서 지정한 멤버 변수의 값이 변경됩니다. 변경에 대한 알림은 없습니다.
헤더: afxdisp.h
OLE 자동화 속성을 정의하고 디스패치 맵에서 속성 값을 가져오고 설정하는 데 사용되는 함수의 이름을 지정합니다.
DISP_PROPERTY_EX(
theClass,
pszName,
memberGet,
memberSet,
vtPropType)
theClass
클래스의 이름입니다.
pszName
속성의 외부 이름입니다.
memberGet
속성을 가져오는 데 사용되는 멤버 함수의 이름입니다.
memberSet
속성을 설정하는 데 사용되는 멤버 함수의 이름입니다.
vtPropType
속성의 형식을 지정하는 값입니다.
memberGet 및 memberSet 함수에는 vtPropType 인수에 의해 결정되는 서명이 있습니다. memberGet 함수는 인수를 사용하지 않고 vtPropType에 지정된 형식의 값을 반환합니다. memberSet 함수는 vtPropType에 지정된 형식의 인수를 사용하고 아무 것도 반환하지 않습니다.
vtPropType 인수는 VARTYPE 형식입니다. 이 인수에 사용할 수 있는 값은 VARENUM 열거형에서 가져옵니다. 이러한 값 목록은 DISP_FUNCTION vtRetVal 매개 변수에 대한 비고를 참조하세요. DISP_FUNCTION 설명에 나열된 VT_EMPTY 속성 데이터 형식으로 허용되지 않습니다.
헤더: afxdisp.h
디스패치 맵에 알림이 있는 OLE 자동화 속성을 정의합니다.
DISP_PROPERTY_NOTIFY(
theClass,
szExternalName,
memberName,
pfnAfterSet,
vtPropType)
theClass
클래스의 이름입니다.
szExternalName
속성의 외부 이름입니다.
memberName
속성이 저장되는 멤버 변수의 이름입니다.
pfnAfterSet
szExternalName에 대한 알림 함수의 이름입니다.
vtPropType
속성의 형식을 지정하는 값입니다.
DISP_PROPERTY 정의된 속성과 달리 DISP_PROPERTY_NOTIFY 정의된 속성은 속성이 변경될 때 pfnAfterSet에 지정된 함수를 자동으로 호출합니다.
vtPropType 인수는 VARTYPE 형식입니다. 이 인수에 사용할 수 있는 값은 VARENUM 열거형에서 가져옵니다.
기호 | 속성 유형 |
---|---|
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | DATE |
VT_BSTR | CString |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARIANT |
VT_UNKNOWN | LPUNKNOWN |
헤더: afxdisp.h
별도의 Get
함수와 Set
멤버 함수를 사용하여 액세스하는 속성을 정의합니다.
DISP_PROPERTY_PARAM(
theClass,
pszExternalName,
pfnGet,
pfnSet,
vtPropType,
vtsParams)
theClass
클래스의 이름입니다.
pszExternalName
속성의 외부 이름입니다.
pfnGet
속성을 가져오는 데 사용되는 멤버 함수의 이름입니다.
pfnSet
속성을 설정하는 데 사용되는 멤버 함수의 이름입니다.
vtPropType
속성의 형식을 지정하는 값입니다.
vtsParams
각 매개 변수에 대해 하나씩 공백으로 구분된 VTS_*
변형 매개 변수 형식의 문자열입니다.
DISP_PROPERTY_EX 매크로와 달리 이 매크로를 사용하면 속성에 대한 매개 변수 목록을 지정할 수 있습니다. 인덱싱되거나 매개 변수화된 속성을 구현하는 데 유용합니다.
사용자가 속성에 액세스할 때 특정 행과 열을 요청할 수 있도록 하는 멤버 함수 가져오기 및 설정 선언을 고려합니다.
SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);
컨트롤 디스패치 맵의 다음 DISP_PROPERTY_PARAM 매크로에 해당합니다.
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Array", GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)
또 다른 예제에서는 다음 get 및 set 멤버 함수를 고려합니다.
IDispatch* GetItem(SHORT index1, SHORT index2, SHORT index3);
void SetItem(SHORT index1, SHORT index2, SHORT index3, IDispatch* pVal);
컨트롤 디스패치 맵의 다음 DISP_PROPERTY_PARAM 매크로에 해당합니다.
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2 VTS_I2)
헤더: afxdisp.h
기존 속성을 개체의 기본값으로 만듭니다.
DISP_DEFVALUE(theClass, pszName)
theClass
클래스의 이름입니다.
pszName
개체의 "값"을 나타내는 속성의 외부 이름입니다.
기본값을 사용하면 Visual Basic 애플리케이션에 대한 자동화 개체 프로그래밍을 더 간소화할 수 있습니다.
개체의 "기본값"은 개체에 대한 참조가 속성 또는 멤버 함수를 지정하지 않을 때 검색 또는 설정되는 속성입니다.
헤더: afxdisp.h