Udostępnij za pośrednictwem


Mapy wysyłania

Automatyzacja OLE zapewnia sposoby wywoływania metod i uzyskiwania dostępu do właściwości w aplikacjach. Mechanizm dostarczany przez bibliotekę klas programu Microsoft Foundation do wysyłania tych żądań to "mapa wysyłania", która wyznacza wewnętrzne i zewnętrzne nazwy funkcji i właściwości obiektów, a także typy danych samych właściwości i argumentów funkcji.

Makro mapy wysyłania opis
DECLARE_DISPATCH_MAP Deklaruje, że mapa wysyłania będzie używana do uwidaczniania metod i właściwości klasy (należy użyć jej w deklaracji klasy).
BEGIN_DISPATCH_MAP Uruchamia definicję mapy wysyłania.
END_DISPATCH_MAP Kończy definicję mapy wysyłania.
DISP_FUNCTION Używana w mapie wysyłania do definiowania funkcji automatyzacji OLE.
DISP_PROPERTY Definiuje właściwość automatyzacji OLE.
DISP_PROPERTY_EX Definiuje właściwość automatyzacji OLE i nazwy funkcji Get i Set.
DISP_PROPERTY_NOTIFY Definiuje właściwość automatyzacji OLE z powiadomieniem.
DISP_PROPERTY_PARAM Definiuje właściwość automatyzacji OLE, która przyjmuje parametry i nazwy funkcji Get i Set.
DISP_DEFVALUE Sprawia, że istniejąca właściwość jest wartością domyślną obiektu.

DECLARE_DISPATCH_MAP

Jeśli klasa pochodna CCmdTargetw programie obsługuje automatyzację OLE, ta klasa musi dostarczyć mapę wysyłania, aby uwidocznić jej metody i właściwości.

DECLARE_DISPATCH_MAP()

Uwagi

Użyj makra DECLARE_DISPATCH_MAP na końcu deklaracji klasy. Następnie w pliku . Plik CPP, który definiuje funkcje składowe dla klasy, użyj makra BEGIN_DISPATCH_MAP. Następnie uwzględnij wpisy makr dla każdej z uwidocznionych metod i właściwości klasy (DISP_FUNCTION, DISP_PROPERTY itd.). Na koniec użyj makra END_DISPATCH_MAP.

Uwaga

W przypadku deklarowania członków po DECLARE_DISPATCH_MAP należy określić dla nich nowy typ dostępu ( public, privatelub protected).

Kreator aplikacji i kreatory kodu pomagają w tworzeniu klas automatyzacji i utrzymywaniu map wysyłania. Aby uzyskać więcej informacji na temat map wysyłania, zobacz Serwery automatyzacji.

Przykład

class CMyServerDoc : public COleServerDoc
{
   DECLARE_DISPATCH_MAP()

   // Remainder of class declaration omitted.

Wymagania

Nagłówek: afxwin.h

BEGIN_DISPATCH_MAP

Deklaruje definicję mapy wysyłki.

BEGIN_DISPATCH_MAP(theClass, baseClass)

Parametry

theClass
Określa nazwę klasy, która jest właścicielem tej mapy wysyłania.

baseClass
Określa nazwę klasy bazowej klasy klasyclass.

Uwagi

W pliku implementacji (.cpp), który definiuje funkcje składowe dla klasy, uruchom mapę wysyłania przy użyciu makra BEGIN_DISPATCH_MAP, dodaj wpisy makra dla każdej funkcji i właściwości wysyłania, a następnie ukończ mapę wysyłania przy użyciu makra END_DISPATCH_MAP.

Wymagania

Nagłówek: afxdisp.h

END_DISPATCH_MAP

Kończy definicję mapy wysyłania.

END_DISPATCH_MAP()

Uwagi

Należy go używać w połączeniu z BEGIN_DISPATCH_MAP.

Wymagania

Nagłówek: afxdisp.h

DISP_FUNCTION

Definiuje funkcję automatyzacji OLE na mapie wysyłania.

DISP_FUNCTION(
    theClass,
    pszName,
    pfnMember,
    vtRetVal,
    vtsParams)

Parametry

theClass
Nazwa klasy.

pszName
Nazwa zewnętrzna funkcji.

pfnMember
Nazwa funkcji składowej.

vtRetVal
Wartość określająca typ zwracany funkcji.

vtsParams
Rozdzielona spacjami lista co najmniej jednej stałej określającej listę parametrów funkcji.

Uwagi

Argument vtRetVal jest typu VARTYPE. Następujące możliwe wartości dla tego argumentu VARENUM są pobierane z wyliczenia:

Symbol Typ zwracany
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 to rozdzielona spacjami lista wartości ze VTS_* stałych. Co najmniej jedna z tych wartości rozdzielona spacjami (nie przecinkami) określa listę parametrów funkcji. Na przykład:

VTS_I2 VTS_PI2

określa listę zawierającą krótką liczbę całkowitą, po której następuje wskaźnik do krótkiej liczby całkowitej.

VTS_ Stałe i ich znaczenia są następujące:

Symbol Typ parametru
VTS_I2 short
VTS_I4 long
VTS_R4 float
VTS_R8 double
VTS_CY const CY lub CY*
VTS_DATE DATE
VTS_BSTR LPCSTR
VTS_DISPATCH LPDISPATCH
VTS_SCODE SCODE
VTS_BOOL BOOL
VTS_VARIANT const VARIANT* lub VARIANT&
VTS_UNKNOWN LPUNKNOWN
VTS_PI2 krótki*
VTS_PI4 długi*
VTS_PR4 spławik*
VTS_PR8 podwójny*
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 Brak parametrów

Wymagania

Nagłówek: afxdisp.h

DISP_PROPERTY

Definiuje właściwość automatyzacji OLE na mapie wysyłania.

DISP_PROPERTY(
    theClass,
    pszName,
    memberName,
    vtPropType)

Parametry

theClass
Nazwa klasy.

pszName
Nazwa zewnętrzna właściwości.

memberName
Nazwa zmiennej składowej, w której jest przechowywana właściwość.

vtPropType
Wartość określająca typ właściwości.

Uwagi

Argument vtPropType jest typu VARTYPE. Możliwe wartości tego argumentu są pobierane z wyliczenia VARENUM:

Symbol Typ właściwości
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

Gdy klient zewnętrzny zmienia właściwość, wartość zmiennej składowej określonej przez element memberName zmienia się; nie ma powiadomienia o zmianie.

Wymagania

Nagłówek: afxdisp.h

DISP_PROPERTY_EX

Definiuje właściwość automatyzacji OLE i nazwij funkcje używane do pobierania i ustawiania wartości właściwości na mapie wysyłki.

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

Parametry

theClass
Nazwa klasy.

pszName
Nazwa zewnętrzna właściwości.

element członkowskiPobierz
Nazwa funkcji składowej użytej do pobrania właściwości.

memberSet
Nazwa funkcji składowej używanej do ustawiania właściwości.

vtPropType
Wartość określająca typ właściwości.

Uwagi

Funkcje memberGet i memberSet mają sygnatury określone przez argument vtPropType . Funkcja memberGet nie przyjmuje żadnych argumentów i zwraca wartość typu określonego przez vtPropType. Funkcja memberSet przyjmuje argument typu określonego przez vtPropType i nie zwraca nic.

Argument vtPropType jest typu VARTYPE. Możliwe wartości tego argumentu są pobierane z wyliczenia VARENUM. Aby uzyskać listę tych wartości, zobacz uwagi dotyczące parametru vtRetVal w DISP_FUNCTION. Należy pamiętać, że VT_EMPTY, wymienione w uwagach DISP_FUNCTION, nie jest dozwolone jako typ danych właściwości.

Wymagania

Nagłówek: afxdisp.h

DISP_PROPERTY_NOTIFY

Definiuje właściwość automatyzacji OLE z powiadomieniem na mapie wysyłania.

DISP_PROPERTY_NOTIFY(
    theClass,
    szExternalName,
    memberName,
    pfnAfterSet,
    vtPropType)

Parametry

theClass
Nazwa klasy.

szExternalName
Nazwa zewnętrzna właściwości.

memberName
Nazwa zmiennej składowej, w której jest przechowywana właściwość.

pfnAfterSet
Nazwa funkcji powiadamiania dla szExternalName.

vtPropType
Wartość określająca typ właściwości.

Uwagi

W przeciwieństwie do właściwości zdefiniowanych za pomocą DISP_PROPERTY właściwość zdefiniowana za pomocą DISP_PROPERTY_NOTIFY automatycznie wywołuje funkcję określoną przez pfnAfterSet po zmianie właściwości.

Argument vtPropType jest typu VARTYPE. Możliwe wartości tego argumentu są pobierane z wyliczenia VARENUM:

Symbol Typ właściwości
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

Wymagania

Nagłówek: afxdisp.h

DISP_PROPERTY_PARAM

Definiuje właściwość dostępną za pomocą oddzielnych Get i Set funkcji składowych.

DISP_PROPERTY_PARAM(
    theClass,
    pszExternalName,
    pfnGet,
    pfnSet,
    vtPropType,
    vtsParams)

Parametry

theClass
Nazwa klasy.

pszExternalName
Nazwa zewnętrzna właściwości.

PfnGet
Nazwa funkcji składowej użytej do pobrania właściwości.

pfnSet
Nazwa funkcji składowej używanej do ustawiania właściwości.

vtPropType
Wartość określająca typ właściwości.

vtsParams
Ciąg rozdzielonych VTS_* spacjami typów parametrów wariantów, po jednym dla każdego parametru.

Uwagi

W przeciwieństwie do makra DISP_PROPERTY_EX, to makro umożliwia określenie listy parametrów dla właściwości. Jest to przydatne w przypadku implementowania właściwości indeksowanych lub sparametryzowanych.

Przykład

Podczas uzyskiwania dostępu do właściwości należy wziąć pod uwagę następującą deklarację funkcji pobierania i ustawiania składowych, które umożliwiają użytkownikowi żądanie określonego wiersza i kolumny:

SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);

Odpowiadają one następującemu makru DISP_PROPERTY_PARAM na mapie wysyłania kontrolek:

DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Array", GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)

W innym przykładzie rozważmy następujące funkcje pobierania i ustawiania składowych:

IDispatch* GetItem(SHORT index1, SHORT index2, SHORT index3);
void SetItem(SHORT index1, SHORT index2, SHORT index3, IDispatch* pVal);

Odpowiadają one następującemu makru DISP_PROPERTY_PARAM na mapie wysyłania kontrolek:

DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2 VTS_I2)

Wymagania

Nagłówek: afxdisp.h

DISP_DEFVALUE

Sprawia, że istniejąca właściwość jest wartością domyślną obiektu.

DISP_DEFVALUE(theClass, pszName)

Parametry

theClass
Nazwa klasy.

pszName
Nazwa zewnętrzna właściwości reprezentującej "wartość" obiektu.

Uwagi

Użycie wartości domyślnej może ułatwić programowanie obiektu automatyzacji dla aplikacji Języka Visual Basic.

Wartość domyślna obiektu to właściwość pobierana lub ustawiana, gdy odwołanie do obiektu nie określa właściwości ani funkcji składowej.

Wymagania

Nagłówek: afxdisp.h

Zobacz też

Makra i globalne