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 CCmdTarget
w 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
, private
lub 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