Sdílet prostřednictvím


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á CCmdTargettří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, privatenebo 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

Viz také

Makra a globální objekty