Схемы подготовки к отправке
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, необходимо указать новый тип доступа (public
private
или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