Dispatchzuordnungen
DIE OLE-Automatisierung bietet Möglichkeiten, Methoden aufzurufen und auf Eigenschaften in allen Anwendungen zuzugreifen. Der Mechanismus, der von der Microsoft Foundation Class Library zum Verteilen dieser Anforderungen bereitgestellt wird, ist die "Dispatch map", die die internen und externen Namen von Objektfunktionen und -eigenschaften sowie die Datentypen der Eigenschaften selbst und von Funktionsargumenten angibt.
Verteilerzuordnungsmakro | Beschreibung |
---|---|
DECLARE_DISPATCH_MAP | Deklariert, dass eine Verteilerzuordnung verwendet wird, um die Methoden und Eigenschaften einer Klasse verfügbar zu machen (muss in der Klassendeklaration verwendet werden). |
BEGIN_DISPATCH_MAP | Startet die Definition einer Verteilerzuordnung. |
END_DISPATCH_MAP | Beendet die Definition einer Verteilerzuordnung. |
DISP_FUNCTION | Wird in einer Verteilerzuordnung verwendet, um eine OLE-Automatisierungsfunktion zu definieren. |
DISP_PROPERTY | Definiert eine OLE-Automatisierungseigenschaft. |
DISP_PROPERTY_EX | Definiert eine OLE-Automatisierungseigenschaft und benennt die Get- und Set-Funktionen. |
DISP_PROPERTY_NOTIFY | Definiert eine OLE-Automatisierungseigenschaft mit Benachrichtigung. |
DISP_PROPERTY_PARAM | Definiert eine OLE-Automatisierungseigenschaft, die Parameter und Namen der Get- und Set-Funktionen verwendet. |
DISP_DEFVALUE | Macht eine vorhandene Eigenschaft zum Standardwert eines Objekts. |
DECLARE_DISPATCH_MAP
Wenn eine CCmdTarget
abgeleitete Klasse in Ihrem Programm OLE-Automatisierung unterstützt, muss diese Klasse eine Verteilerzuordnung bereitstellen, um ihre Methoden und Eigenschaften verfügbar zu machen.
DECLARE_DISPATCH_MAP()
Hinweise
Verwenden Sie das DECLARE_DISPATCH_MAP Makro am Ende der Klassendeklaration. Dann in der . CPP-Datei, die die Memberfunktionen für die Klasse definiert, verwenden Sie das BEGIN_DISPATCH_MAP Makro. Schließen Sie dann Makroeinträge für die verfügbar gemachten Methoden und Eigenschaften Ihrer Klasse ein (DISP_FUNCTION, DISP_PROPERTY usw.). Verwenden Sie schließlich das END_DISPATCH_MAP Makro.
Hinweis
Wenn Sie Elemente nach DECLARE_DISPATCH_MAP deklarieren, müssen Sie einen neuen Zugriffstyp ( oder public
private
protected
) für sie angeben.
Der Anwendungs-Assistent und Code-Assistenten unterstützen das Erstellen von Automatisierungsklassen und die Verwaltung von Verteilerzuordnungen. Weitere Informationen zu Verteilerzuordnungen finden Sie unter Automatisierungsserver.
Beispiel
class CMyServerDoc : public COleServerDoc
{
DECLARE_DISPATCH_MAP()
// Remainder of class declaration omitted.
Anforderungen
Header: afxwin.h
BEGIN_DISPATCH_MAP
Deklariert die Definition Ihrer Verteilerzuordnung.
BEGIN_DISPATCH_MAP(theClass, baseClass)
Parameter
theClass
Gibt den Namen der Klasse an, die diese Verteilerzuordnung besitzt.
baseClass
Gibt den Basisklassennamen der Klasse an.
Hinweise
Starten Sie in der Implementierungsdatei (.cpp), die die Memberfunktionen für Ihre Klasse definiert, die Verteilerzuordnung mit dem BEGIN_DISPATCH_MAP-Makro, fügen Sie Makroeinträge für jede Ihrer Verteilerfunktionen und -eigenschaften hinzu, und schließen Sie die Verteilerzuordnung mit dem END_DISPATCH_MAP Makro ab.
Anforderungen
Header: afxdisp.h
END_DISPATCH_MAP
Beendet die Definition Ihrer Verteilerkarte.
END_DISPATCH_MAP()
Hinweise
Sie muss in Verbindung mit BEGIN_DISPATCH_MAP verwendet werden.
Anforderungen
Header: afxdisp.h
DISP_FUNCTION
Definiert eine OLE-Automatisierungsfunktion in einer Verteilerzuordnung.
DISP_FUNCTION(
theClass,
pszName,
pfnMember,
vtRetVal,
vtsParams)
Parameter
theClass
Name der Klasse.
pszName
Externer Name der Funktion.
pfnMember
Name der Memberfunktion.
vtRetVal
Ein Wert, der den Rückgabetyp der Funktion angibt.
vtsParams
Eine durch Leerzeichen getrennte Liste einer oder mehrerer Konstanten, die die Parameterliste der Funktion angeben.
Hinweise
Das Argument vtRetVal ist vom Typ VARTYPE. Die folgenden möglichen Werte für dieses Argument werden aus der VARENUM
Enumeration entnommen:
Symbol | Rückgabetyp |
---|---|
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 |
Das Argument vtsParams ist eine durch Leerzeichen getrennte Liste von Werten aus den VTS_*
Konstanten. Mindestens einer dieser Werte, die durch Leerzeichen (keine Kommas) getrennt sind, gibt die Parameterliste der Funktion an. Beispiel:
VTS_I2 VTS_PI2
Gibt eine Liste an, die eine kurze ganze Zahl gefolgt von einem Zeiger auf eine kurze ganze Zahl enthält.
Die VTS_
Konstanten und ihre Bedeutungen sind wie folgt:
Symbol | Parametertyp |
---|---|
VTS_I2 | short |
VTS_I4 | long |
VTS_R4 | float |
VTS_R8 | double |
VTS_CY | const CY oder CY* |
VTS_DATE | DATE |
VTS_BSTR | LPCSTR |
VTS_DISPATCH | LPDISPATCH |
VTS_SCODE | SCODE |
VTS_BOOL | BOOL |
VTS_VARIANT | const VARIANT* oder VARIANT& |
VTS_UNKNOWN | LPUNKNOWN |
VTS_PI2 | kurz* |
VTS_PI4 | lang* |
VTS_PR4 | schweben* |
VTS_PR8 | doppelt* |
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 | Keine Parameter |
Anforderungen
Header: afxdisp.h
DISP_PROPERTY
Definiert eine OLE-Automatisierungseigenschaft in einer Verteilerzuordnung.
DISP_PROPERTY(
theClass,
pszName,
memberName,
vtPropType)
Parameter
theClass
Name der Klasse.
pszName
Externer Name der Eigenschaft.
memberName
Name der Membervariable, in der die Eigenschaft gespeichert wird.
vtPropType
Ein Wert, der den Typ der Eigenschaft angibt.
Hinweise
Das vtPropType-Argument ist vom Typ VARTYPE. Mögliche Werte für dieses Argument stammen aus der VARENUM-Aufzählung:
Symbol | Eigenschaftstyp |
---|---|
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 |
Wenn ein externer Client die Eigenschaft ändert, ändert sich der Wert der membervariablen, die durch memberName angegeben wird. Es gibt keine Benachrichtigung über die Änderung.
Anforderungen
Header: afxdisp.h
DISP_PROPERTY_EX
Definiert eine OLE-Automatisierungseigenschaft, und benennen Sie die Funktionen, mit deren Hilfe der Wert der Eigenschaft in einer Verteilerzuordnung abgerufen und festgelegt wird.
DISP_PROPERTY_EX(
theClass,
pszName,
memberGet,
memberSet,
vtPropType)
Parameter
theClass
Name der Klasse.
pszName
Externer Name der Eigenschaft.
memberGet
Name der Memberfunktion, die zum Abrufen der Eigenschaft verwendet wird.
memberSet
Name der Memberfunktion, die zum Festlegen der Eigenschaft verwendet wird.
vtPropType
Ein Wert, der den Typ der Eigenschaft angibt.
Hinweise
Die MemberGet - und memberSet-Funktionen weisen Signaturen auf, die vom vtPropType-Argument bestimmt werden. Die MemberGet-Funktion akzeptiert keine Argumente und gibt einen Wert des typs zurück, der durch vtPropType angegeben ist. Die MemberSet-Funktion verwendet ein Argument des durch vtPropType angegebenen Typs und gibt nichts zurück.
Das vtPropType-Argument ist vom Typ VARTYPE. Mögliche Werte für dieses Argument stammen aus der VARENUM-Aufzählung. Eine Liste dieser Werte finden Sie in den Anmerkungen zum vtRetVal-Parameter in DISP_FUNCTION. Beachten Sie, dass VT_EMPTY, in den DISP_FUNCTION Anmerkungen aufgeführt, nicht als Eigenschaftendatentyp zulässig ist.
Anforderungen
Header: afxdisp.h
DISP_PROPERTY_NOTIFY
Definiert eine OLE-Automatisierungseigenschaft mit Benachrichtigung in einer Verteilerzuordnung.
DISP_PROPERTY_NOTIFY(
theClass,
szExternalName,
memberName,
pfnAfterSet,
vtPropType)
Parameter
theClass
Name der Klasse.
szExternalName
Externer Name der Eigenschaft.
memberName
Name der Membervariable, in der die Eigenschaft gespeichert wird.
pfnAfterSet
Name der Benachrichtigungsfunktion für szExternalName.
vtPropType
Ein Wert, der den Typ der Eigenschaft angibt.
Hinweise
Im Gegensatz zu eigenschaften, die mit DISP_PROPERTY definiert wurden, ruft eine mit DISP_PROPERTY_NOTIFY definierte Eigenschaft die von pfnAfterSet angegebene Funktion automatisch auf, wenn die Eigenschaft geändert wird.
Das vtPropType-Argument ist vom Typ VARTYPE. Mögliche Werte für dieses Argument stammen aus der VARENUM-Aufzählung:
Symbol | Eigenschaftstyp |
---|---|
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 |
Anforderungen
Header: afxdisp.h
DISP_PROPERTY_PARAM
Definiert eine Eigenschaft, auf die mit separaten Get
Funktionen und Set
Memberfunktionen zugegriffen wird.
DISP_PROPERTY_PARAM(
theClass,
pszExternalName,
pfnGet,
pfnSet,
vtPropType,
vtsParams)
Parameter
theClass
Name der Klasse.
pszExternalName
Externer Name der Eigenschaft.
pfnGet
Name der Memberfunktion, die zum Abrufen der Eigenschaft verwendet wird.
pfnSet
Name der Memberfunktion, die zum Festlegen der Eigenschaft verwendet wird.
vtPropType
Ein Wert, der den Typ der Eigenschaft angibt.
vtsParams
Eine Zeichenfolge mit durch Leerzeichen getrennten VTS_*
Variant-Parametertypen, eine für jeden Parameter.
Hinweise
Im Gegensatz zum DISP_PROPERTY_EX Makros können Sie mit diesem Makro eine Parameterliste für die Eigenschaft angeben. Dies ist nützlich für die Implementierung von Eigenschaften, die indiziert oder parametrisiert werden.
Beispiel
Beachten Sie die folgende Deklaration der Funktionen zum Abrufen und Festlegen von Membern, mit denen der Benutzer beim Zugriff auf die Eigenschaft eine bestimmte Zeile und Spalte anfordern kann:
SHORT GetArray(SHORT row, SHORT column);
void SetArray(SHORT row, SHORT column, SHORT newVal);
Diese entsprechen dem folgenden DISP_PROPERTY_PARAM Makro in der Steuerelement-Verteilerzuordnung:
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Array", GetArray, SetArray, VT_I2, VTS_I2 VTS_I2)
Betrachten Sie als weiteres Beispiel die folgenden Funktionen zum Abrufen und Festlegen von Membern:
IDispatch* GetItem(SHORT index1, SHORT index2, SHORT index3);
void SetItem(SHORT index1, SHORT index2, SHORT index3, IDispatch* pVal);
Diese entsprechen dem folgenden DISP_PROPERTY_PARAM Makro in der Steuerelement-Verteilerzuordnung:
DISP_PROPERTY_PARAM(CMFCActiveXControlCtrl, "Item", GetItem, SetItem, VT_DISPATCH, VTS_I2 VTS_I2 VTS_I2)
Anforderungen
Header: afxdisp.h
DISP_DEFVALUE
Macht eine vorhandene Eigenschaft zum Standardwert eines Objekts.
DISP_DEFVALUE(theClass, pszName)
Parameter
theClass
Name der Klasse.
pszName
Externer Name der Eigenschaft, die den Wert des Objekts darstellt.
Hinweise
Die Verwendung eines Standardwerts kann die Programmierung Ihres Automatisierungsobjekts für Visual Basic-Anwendungen vereinfachen.
Der "Standardwert" des Objekts ist die Eigenschaft, die abgerufen oder festgelegt wird, wenn ein Verweis auf ein Objekt keine Eigenschaft oder Memberfunktion angibt.
Anforderungen
Header: afxdisp.h