Поделиться через


Схемы подготовки к отправке

OLE Automation предоставляет способы вызова методов и доступа к свойствам в приложениях. Механизм, предоставляемый библиотекой классов Microsoft Foundation для отправки этих запросов, является "картой отправки", которая обозначает внутренние и внешние имена функций и свойств объектов, а также типы данных самих свойств и аргументов функций.

Макрос карты отправки Description
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 Определяет свойство автоматизации OLE, которое принимает параметры и имена функций Get и Set.
DISP_DEFVALUE Делает существующее свойство значением по умолчанию объекта.

DECLARE_DISPATCH_MAP

Если производный CCmdTargetкласс в программе поддерживает OLE Automation, этот класс должен предоставить карту отправки для предоставления своих методов и свойств.

DECLARE_DISPATCH_MAP()

Замечания

Используйте макрос DECLARE_DISPATCH_MAP в конце объявления класса. Затем в . CPP-файл, определяющий функции-члены для класса, используйте макрос BEGIN_DISPATCH_MAP. Затем включите записи макросов для каждого из предоставленных методов и свойств класса (DISP_FUNCTION, DISP_PROPERTY и т. д.). Наконец, используйте макрос END_DISPATCH_MAP.

Примечание.

Если вы объявляете какие-либо члены после DECLARE_DISPATCH_MAP, необходимо указать новый тип доступа (publicprivateилиprotected) для них.

Мастер приложений и мастера кода помогают создавать классы автоматизации и поддерживать карты отправки. Дополнительные сведения о картах отправки см. в разделе "Серверы автоматизации".

Пример

class CMyServerDoc : public COleServerDoc
{
   DECLARE_DISPATCH_MAP()

   // Remainder of class declaration omitted.

Требования

Заголовок: afxwin.h

BEGIN_DISPATCH_MAP

Объявляет определение карты отправки.

BEGIN_DISPATCH_MAP(theClass, baseClass)

Параметры

TheClass
Указывает имя класса, которому принадлежит эта карта отправки.

baseClass
Указывает имя базового класса класса класса.

Замечания

В файле реализации (.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

Когда внешний клиент изменяет свойство, значение переменной члена, указанной именем участника , изменяется; уведомление об изменении отсутствует.

Требования

Заголовок: afxdisp.h

DISP_PROPERTY_EX

Определяет свойство автоматизации OLE и присваивает функции, используемые для получения и задания значения свойства в карте отправки.

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

Параметры

TheClass
Имя класса.

pszName
Внешнее имя свойства.

memberGet
Имя функции-члена, используемой для получения свойства.

memberSet
Имя функции-члена, используемой для задания свойства.

vtPropType
Значение, указывающее тип свойства.

Замечания

Функции memberGet и memberSet имеют сигнатуры, определенные аргументом vtPropType . Функция memberGet не принимает аргументы и возвращает значение типа, указанного vtPropType. Функция memberSet принимает аргумент типа, указанного vtPropType , и возвращает ничего.

Аргумент vtPropType имеет тип VARTYPE . Возможные значения этого аргумента взяты из перечисления VARENUM. Список этих значений см. в разделе "Примечания" для параметра vtRetVal в DISP_FUNCTION. Обратите внимание, что VT_EMPTY, перечисленные в DISP_FUNCTION примечаниях, не разрешены в качестве типа данных свойства.

Требования

Заголовок: 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)

В качестве другого примера рассмотрим следующие функции получения и задания элементов:

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

См. также

Макросы и глобальные