Expediční mapy
Automatizace OLE poskytuje způsoby volání metod a přístup k vlastnostem napříč aplikacemi. Mechanismus poskytnutý knihovnou tříd Microsoft Foundation pro odesílání těchto požadavků je "mapa odeslání", která určuje interní a externí názvy objektů funkcí a vlastností, jakož i datové typy samotných vlastností a argumentů funkce.
Makro mapy odeslání | Popis |
---|---|
DECLARE_DISPATCH_MAP | Deklaruje, že k vystavení metod a vlastností třídy se použije mapa odeslání (musí se použít v deklaraci třídy). |
BEGIN_DISPATCH_MAP | Spustí definici mapy odeslání. |
END_DISPATCH_MAP | Ukončí definici mapy odeslání. |
DISP_FUNCTION | Používá se v mapě odeslání k definování funkce automatizace OLE. |
DISP_PROPERTY | Definuje vlastnost automatizace OLE. |
DISP_PROPERTY_EX | Definuje vlastnost automatizace OLE a pojmenuje funkce Get a Set. |
DISP_PROPERTY_NOTIFY | Definuje vlastnost automatizace OLE s oznámením. |
DISP_PROPERTY_PARAM | Definuje vlastnost automatizace OLE, která přebírá parametry a názvy Funkcí Get a Set. |
DISP_DEFVALUE | Vytvoří existující vlastnost jako výchozí hodnotu objektu. |
DECLARE_DISPATCH_MAP
Pokud -odvozená CCmdTarget
třída v programu podporuje OLE Automation, tato třída musí poskytnout mapu dispečer pro zveřejnění svých metod a vlastností.
DECLARE_DISPATCH_MAP()
Poznámky
Použijte makro DECLARE_DISPATCH_MAP na konci deklarace třídy. Pak v sadě . Soubor CPP, který definuje členské funkce pro třídu, použijte BEGIN_DISPATCH_MAP makro. Potom zahrňte položky makra pro všechny metody a vlastnosti vystavené vaší třídy (DISP_FUNCTION, DISP_PROPERTY atd.). Nakonec použijte makro END_DISPATCH_MAP.
Poznámka:
Pokud deklarujete všechny členy po DECLARE_DISPATCH_MAP, musíte pro ně zadat nový typ přístupu ( public
, private
nebo protected
).
Průvodce aplikací a průvodci kódem pomáhají při vytváření tříd automatizace a při údržbě map dispečerů. Další informace o mapách dispečerů najdete v tématu Automatizační servery.
Příklad
class CMyServerDoc : public COleServerDoc
{
DECLARE_DISPATCH_MAP()
// Remainder of class declaration omitted.
Požadavky
Hlavička: afxwin.h
BEGIN_DISPATCH_MAP
Deklaruje definici mapy odeslání.
BEGIN_DISPATCH_MAP(theClass, baseClass)
Parametry
theClass
Určuje název třídy, která vlastní tuto mapu odeslání.
baseClass
Určuje název základní třídy Třídy.
Poznámky
V souboru implementace (.cpp), který definuje členské funkce pro vaši třídu, spusťte mapu dispatch pomocí BEGIN_DISPATCH_MAP makra, přidejte položky makra pro každou funkci a vlastnosti odeslání a dokončete mapu odeslání pomocí makra END_DISPATCH_MAP.
Požadavky
Hlavička: afxdisp.h
END_DISPATCH_MAP
Ukončí definici mapy odeslání.
END_DISPATCH_MAP()
Poznámky
Musí být používán ve spojení s BEGIN_DISPATCH_MAP.
Požadavky
Hlavička: afxdisp.h
DISP_FUNCTION
Definuje funkci automatizace OLE v mapě odeslání.
DISP_FUNCTION(
theClass,
pszName,
pfnMember,
vtRetVal,
vtsParams)
Parametry
theClass
Název třídy.
pszName
Externí název funkce
pfnMember
Název členské funkce.
vtRetVal
Hodnota určující návratový typ funkce.
vtsParams
Seznam oddělený mezerami s jednou nebo více konstantami určujícími seznam parametrů funkce.
Poznámky
Argument vtRetVal je typu VARTYPE. Následující možné hodnoty pro tento argument jsou převzaty z výčtu VARENUM
:
Symbol | Návratový typ |
---|---|
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 |
Argument vtsParams je seznam hodnot oddělených mezerami od VTS_*
konstant. Jedna nebo více těchto hodnot oddělených mezerami (nikoli čárkami) určuje seznam parametrů funkce. Příklad:
VTS_I2 VTS_PI2
určuje seznam obsahující krátké celé číslo následované ukazatelem na krátké celé číslo.
Konstanty VTS_
a jejich významy jsou následující:
Symbol | Typ parametru |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_CY | const CY nebo CY* |
VTS_DATE | DATE |
VTS_BSTR | LPCSTR |
VTS_DISPATCH | LPDISPATCH |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* nebo VARIANT& |
VTS_UNKNOWN | LPUNKNOWN |
VTS_PI2 | krátký* |
VTS_PI4 | dlouhý* |
VTS_PR4 | plout* |
VTS_PR8 | dvojitý* |
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 | Žádné parametry |
Požadavky
Hlavička: afxdisp.h
DISP_PROPERTY
Definuje vlastnost automatizace OLE v mapě odeslání.
DISP_PROPERTY(
theClass,
pszName,
memberName,
vtPropType)
Parametry
theClass
Název třídy.
pszName
Externí název vlastnosti.
memberName
Název členské proměnné, ve které je vlastnost uložena.
vtPropType
Hodnota určující typ vlastnosti.
Poznámky
Argument vtPropType je typu VARTYPE. Možné hodnoty pro tento argument jsou převzaty z výčtu VARENUM:
Symbol | Typ vlastnosti |
---|---|
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 |
Když externí klient změní vlastnost, hodnota členské proměnné určené parametrem memberName se změní; neexistuje žádné oznámení o změně.
Požadavky
Hlavička: afxdisp.h
DISP_PROPERTY_EX
Definuje vlastnost automatizace OLE a pojmenuje funkce použité k získání a nastavení hodnoty vlastnosti v mapě odeslání.
DISP_PROPERTY_EX(
theClass,
pszName,
memberGet,
memberSet,
vtPropType)
Parametry
theClass
Název třídy.
pszName
Externí název vlastnosti.
memberGet
Název členské funkce použité k získání vlastnosti.
memberSet
Název členské funkce použité k nastavení vlastnosti.
vtPropType
Hodnota určující typ vlastnosti.
Poznámky
ČlenskéGet a členskéSet funkce mají podpisy určené argumentem vtPropType. Funkce memberGet nepřijímá žádné argumenty a vrací hodnotu typu určeného vtPropType. Funkce memberSet přebírá argument typu určený vtPropType a vrátí nic.
Argument vtPropType je typu VARTYPE. Možné hodnoty pro tento argument jsou převzaty z výčtu VARENUM. Seznam těchto hodnot naleznete v poznámkách pro parametr vtRetVal v DISP_FUNCTION. Všimněte si, že VT_EMPTY uvedený v poznámkách DISP_FUNCTION není povolen jako datový typ vlastnosti.
Požadavky
Hlavička: afxdisp.h
DISP_PROPERTY_NOTIFY
Definuje vlastnost automatizace OLE s oznámením v mapě odeslání.
DISP_PROPERTY_NOTIFY(
theClass,
szExternalName,
memberName,
pfnAfterSet,
vtPropType)
Parametry
theClass
Název třídy.
szExternalName
Externí název vlastnosti.
memberName
Název členské proměnné, ve které je vlastnost uložena.
pfnAfterSet
Název funkce oznámení pro szExternalName.
vtPropType
Hodnota určující typ vlastnosti.
Poznámky
Na rozdíl od vlastností definovaných pomocí DISP_PROPERTY bude vlastnost definovaná pomocí DISP_PROPERTY_NOTIFY automaticky volat funkci určenou pfnAfterSet při změně vlastnosti.
Argument vtPropType je typu VARTYPE. Možné hodnoty pro tento argument jsou převzaty z výčtu VARENUM:
Symbol | Typ vlastnosti |
---|---|
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 |
Požadavky
Hlavička: afxdisp.h
DISP_PROPERTY_PARAM
Definuje vlastnost, ke které se přistupuje pomocí samostatných Get
a Set
členských funkcí.
DISP_PROPERTY_PARAM(
theClass,
pszExternalName,
pfnGet,
pfnSet,
vtPropType,
vtsParams)
Parametry
theClass
Název třídy.
pszExternalName
Externí název vlastnosti.
pfnGet
Název členské funkce použité k získání vlastnosti.
pfnSet
Název členské funkce použité k nastavení vlastnosti.
vtPropType
Hodnota určující typ vlastnosti.
vtsParams
Řetězec variantních typů parametrů oddělených VTS_*
mezerami, jeden pro každý parametr.
Poznámky
Na rozdíl od DISP_PROPERTY_EX makra umožňuje toto makro zadat seznam parametrů vlastnosti. To je užitečné pro implementaci vlastností, které jsou indexovány nebo parametrizovány.
Příklad
Při přístupu k vlastnosti zvažte následující deklaraci get a set členské funkce, které uživateli umožňují požádat o konkrétní řádek a sloupec:
SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);
Odpovídají následujícímu DISP_PROPERTY_PARAM makre v mapě dispečeru ovládacího prvku:
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Array", GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)
Jako další příklad zvažte následující získání a nastavení členských funkcí:
IDispatch* GetItem(SHORT index1, SHORT index2, SHORT index3);
void SetItem(SHORT index1, SHORT index2, SHORT index3, IDispatch* pVal);
Odpovídají následujícímu DISP_PROPERTY_PARAM makre v mapě dispečeru ovládacího prvku:
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2 VTS_I2)
Požadavky
Hlavička: afxdisp.h
DISP_DEFVALUE
Vytvoří existující vlastnost jako výchozí hodnotu objektu.
DISP_DEFVALUE(theClass, pszName)
Parametry
theClass
Název třídy.
pszName
Externí název vlastnosti, která představuje hodnotu objektu.
Poznámky
Použití výchozí hodnoty může zjednodušit programování objektu automatizace pro aplikace jazyka Visual Basic.
Výchozí hodnota objektu je vlastnost, která se načte nebo nastaví, když odkaz na objekt nezadá vlastnost nebo členovou funkci.
Požadavky
Hlavička: afxdisp.h