다음을 통해 공유


디스패치 맵

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 기존 속성을 개체의 기본값으로 만듭니다.

DECLARE_DISPATCH_MAP

프로그램에서 파생 클래스가 CCmdTargetOLE Automation을 지원하는 경우 해당 클래스는 해당 메서드와 속성을 노출하는 디스패치 맵을 제공해야 합니다.

DECLARE_DISPATCH_MAP()

설명

클래스 선언의 끝에 DECLARE_DISPATCH_MAP 매크로를 사용합니다. 그런 다음. 클래스의 멤버 함수를 정의하는 CPP 파일은 BEGIN_DISPATCH_MAP 매크로를 사용합니다. 그런 다음 각 클래스의 노출된 메서드 및 속성(DISP_FUNCTION, DISP_PROPERTY 등)에 대한 매크로 항목을 포함합니다. 마지막으로 END_DISPATCH_MAP 매크로를 사용합니다.

참고 항목

DECLARE_DISPATCH_MAP 후에 멤버를 선언하는 경우 새 액세스 형식(public또는privateprotected)을 지정해야 합니다.

애플리케이션 마법사 및 코드 마법사는 Automation 클래스를 만들고 디스패치 맵을 기본 데 도움이 됩니다. 디스패치 맵에 대한 자세한 내용은 Automation 서버를 참조 하세요.

예시

class CMyServerDoc : public COleServerDoc
{
   DECLARE_DISPATCH_MAP()

   // Remainder of class declaration omitted.

요구 사항

헤더: afxwin.h

BEGIN_DISPATCH_MAP

디스패치 맵의 정의를 선언합니다.

BEGIN_DISPATCH_MAP(theClass, baseClass)

매개 변수

theClass
이 디스패치 맵을 소유하는 클래스의 이름을 지정합니다.

baseClass
Class의 기본 클래스 이름을 지정합니다.

설명

클래스의 멤버 함수를 정의하는 구현(.cpp) 파일에서 BEGIN_DISPATCH_MAP 매크로를 사용하여 디스패치 맵을 시작하고, 각 디스패치 함수 및 속성에 대한 매크로 항목을 추가하고, END_DISPATCH_MAP 매크로를 사용하여 디스패치 맵을 완료합니다.

요구 사항

헤더: afxdisp.h

END_DISPATCH_MAP

디스패치 맵의 정의를 종료합니다.

END_DISPATCH_MAP()

설명

BEGIN_DISPATCH_MAP 함께 사용해야 합니다.

요구 사항

헤더: afxdisp.h

DISP_FUNCTION

디스패치 맵에서 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

DISP_PROPERTY

디스패치 맵에서 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

DISP_PROPERTY_EX

OLE 자동화 속성을 정의하고 디스패치 맵에서 속성 값을 가져오고 설정하는 데 사용되는 함수의 이름을 지정합니다.

DISP_PROPERTY_EX(
    theClass,
    pszName,
    memberGet,
    memberSet,
    vtPropType)

매개 변수

theClass
클래스의 이름입니다.

pszName
속성의 외부 이름입니다.

memberGet
속성을 가져오는 데 사용되는 멤버 함수의 이름입니다.

Memberset
속성을 설정하는 데 사용되는 멤버 함수의 이름입니다.

vtPropType
속성의 형식을 지정하는 값입니다.

설명

memberGetmemberSet 함수에는 vtPropType 인수에 의해 결정되는 서명이 있습니다. memberGet 함수는 인수를 사용하지 않고 vtPropType지정된 형식의 값을 반환합니다. memberSet 함수는 vtPropType에 지정된 형식의 인수를 사용하고 아무 것도 반환하지 않습니다.

vtPropType 인수는 VARTYPE 형식입니다. 이 인수에 사용할 수 있는 값은 VARENUM 열거형에서 가져옵니다. 이러한 값 목록은 DISP_FUNCTION vtRetVal 매개 변수에 대한 비고를 참조하세요. DISP_FUNCTION 설명에 나열된 VT_EMPTY 속성 데이터 형식으로 허용되지 않습니다.

요구 사항

헤더: afxdisp.h

DISP_PROPERTY_NOTIFY

디스패치 맵에 알림이 있는 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

DISP_PROPERTY_PARAM

별도의 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

기존 속성을 개체의 기본값으로 만듭니다.

DISP_DEFVALUE(theClass, pszName)

매개 변수

theClass
클래스의 이름입니다.

pszName
개체의 "값"을 나타내는 속성의 외부 이름입니다.

설명

기본값을 사용하면 Visual Basic 애플리케이션에 대한 자동화 개체 프로그래밍을 더 간소화할 수 있습니다.

개체의 "기본값"은 개체에 대한 참조가 속성 또는 멤버 함수를 지정하지 않을 때 검색 또는 설정되는 속성입니다.

요구 사항

헤더: afxdisp.h

참고 항목

매크로 및 전역