Freigeben über


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 CCmdTargetabgeleitete 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 publicprivateprotected) 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

Siehe auch

Makros und Globalen