共用方式為


分派對應

OLE Automation 提供方法呼叫方法,以及存取跨應用程式的屬性。 Microsoft Foundation Class Library 為分派這些要求所提供的機制是「分派對應」,可指定物件函式和屬性的內部和外部名稱,以及屬性本身和函式引數的資料類型。

分派對應宏 描述
DECLARE_DISPATCH_MAP 宣告分派對應將用來公開類別的方法和屬性(必須在類別宣告中使用)。
BEGIN_DISPATCH_MAP 啟動分派對應的定義。
END_DISPATCH_MAP 結束分派對應的定義。
DISP_FUNCTION 用於分派對應,以定義 OLE 自動化函式。
DISP_PROPERTY 定義 OLE 自動化屬性。
DISP_PROPERTY_EX 定義 OLE 自動化屬性,並將 Get 和 Set 函式命名為 。
DISP_PROPERTY_NOTIFY 使用通知定義 OLE 自動化屬性。
DISP_PROPERTY_PARAM 定義採用參數和名稱 Get 和 Set 函式的 OLE 自動化屬性。
DISP_DEFVALUE 將現有的屬性設為物件的預設值。

DECLARE_DISPATCH_MAP

CCmdTarget如果您的程式中的衍生類別支援 OLE Automation,該類別必須提供分派對應來公開其方法和屬性。

DECLARE_DISPATCH_MAP()

備註

在類別宣告結尾使用 DECLARE_DISPATCH_MAP 宏。 然後在 中。定義 類別成員函式的 CPP 檔案,請使用 BEGIN_DISPATCH_MAP 宏。 然後包含每個類別公開方法和屬性的宏專案(DISP_FUNCTION、DISP_PROPERTY等等)。 最後,使用 END_DISPATCH_MAP 宏。

注意

如果您在DECLARE_DISPATCH_MAP之後宣告任何成員,則必須為其指定新的存取類型 ( publicprivateprotected )。

應用程式精靈和程式碼精靈可協助建立自動化類別和維護分派對應。 如需分派對應的詳細資訊,請參閱 自動化伺服器

範例

class CMyServerDoc : public COleServerDoc
{
   DECLARE_DISPATCH_MAP()

   // Remainder of class declaration omitted.

需求

標題: afxwin.h

BEGIN_DISPATCH_MAP

宣告您的分派對應的定義。

BEGIN_DISPATCH_MAP(theClass, baseClass)

參數

theClass
指定擁有此分派對應之類別的名稱。

baseClass
指定Class 基類名稱。

備註

在定義類別成員函式的實作 (.cpp) 檔案中,使用 BEGIN_DISPATCH_MAP 宏啟動分派對應、新增每個分派函式和屬性的宏專案,並使用 END_DISPATCH_MAP 宏完成分派對應。

需求

標頭: afxdisp.h

END_DISPATCH_MAP

結束您的分派對應的定義。

END_DISPATCH_MAP()

備註

它必須與BEGIN_DISPATCH_MAP搭配使用。

需求

標頭: afxdisp.h

DISP_FUNCTION

在分派對應中定義 OLE 自動化函式。

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

參數

theClass
類別的名稱。

pszName
函式的外部名稱。

pfnMember
成員函式的名稱。

vtRetVal
值,指定函式的傳回型別。

vtsParams
一個或多個常數的空間分隔清單,指定函式的參數清單。

備註

vtRetVal 引數的類型為 VARTYPE。 這個引數的下列可能值取自 VARENUM 列舉:

符號 傳回類型
VT_EMPTY void
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE 日期
VT_BSTR BSTR
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_Variant VARIANT
VT_UNKNOWN LPUNKNOWN

vtsParams 引數是常數中以空格分隔的值 VTS_* 清單。 以空格分隔的其中一或多個值(不是逗號)會指定函式的參數清單。 例如,

VTS_I2 VTS_PI2

指定清單,其中包含簡短整數,後面接著短整數的指標。

VTS_常數及其意義如下:

符號 參數類型
VTS_I2 short
VTS_I4 long
VTS_R4 float
VTS_R8 double
VTS_CY const CYCY*
VTS_DATE 日期
VTS_BSTR LPCSTR
VTS_DISPATCH LPDISPATCH
VTS_SCODE SCODE
VTS_BOOL BOOL
VTS_VARIANT const VARIANT*VARIANT&
VTS_UNKNOWN LPUNKNOWN
VTS_PI2 短*
VTS_PI4 長*
VTS_PR4 浮動*
VTS_PR8 雙*
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 無參數

需求

標頭: afxdisp.h

DISP_PROPERTY

在分派對應中定義 OLE 自動化屬性。

DISP_PROPERTY(
    theClass,
    pszName,
    memberName,
    vtPropType)

參數

theClass
類別的名稱。

pszName
屬性的外部名稱。

memberName
屬性儲存所在的成員變數名稱。

vtPropType
值,指定屬性的類型。

備註

vtPropType 引數的類型為 VARTYPE 。 此引數的可能值取自 VARENUM 列舉:

符號 屬性類型
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE 日期
VT_BSTR CString
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_Variant VARIANT
VT_UNKNOWN LPUNKNOWN

當外部用戶端變更 屬性時,memberName 指定成員變數的值會變更;不會通知變更。

需求

標頭: afxdisp.h

DISP_PROPERTY_EX

定義 OLE 自動化屬性,並命名用來取得和設定分派對應中屬性值的函式。

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

參數

theClass
類別的名稱。

pszName
屬性的外部名稱。

memberGet
用來取得屬性的成員函式名稱。

memberSet
用來設定屬性的成員函式名稱。

vtPropType
值,指定屬性的類型。

備註

memberGet memberSet 函式具有 vtPropType 引數所決定的 章。 memberGet 函式不會接受任何引數,並傳回 vtPropType 指定的型別值。 memberSet 式接受 vtPropType 指定類型的引數,且不會傳回任何內容。

vtPropType 引數的類型為 VARTYPE。 此引數的可能值取自 VARENUM 列舉。 如需這些值的清單,請參閱 DISP_FUNCTION 中 vtRetVal 參數的 。 請注意,VT_EMPTY,列在DISP_FUNCTION備註中,不允許做為屬性資料類型。

需求

標頭: afxdisp.h

DISP_PROPERTY_NOTIFY

在分派對應中定義具有通知的 OLE 自動化屬性。

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

參數

theClass
類別的名稱。

szExternalName
屬性的外部名稱。

memberName
屬性儲存所在的成員變數名稱。

pfnAfterSet
szExternalName 的通知函 式名稱。

vtPropType
值,指定屬性的類型。

備註

不同于使用 DISP_PROPERTY 定義的屬性,以 DISP_PROPERTY_NOTIFY 定義的屬性會在屬性變更時自動呼叫 pfnAfterSet 指定的 函式。

vtPropType 引數的類型為 VARTYPE。 此引數的可能值取自 VARENUM 列舉:

符號 屬性類型
VT_I2 short
VT_I4 long
VT_R4 float
VT_R8 double
VT_CY CY
VT_DATE 日期
VT_BSTR CString
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_Variant VARIANT
VT_UNKNOWN LPUNKNOWN

需求

標頭: afxdisp.h

DISP_PROPERTY_PARAM

定義使用個別 GetSet 成員函式存取的屬性。

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

參數

theClass
類別的名稱。

pszExternalName
屬性的外部名稱。

pfnGet
用來取得屬性的成員函式名稱。

pfnSet
用來設定屬性的成員函式名稱。

vtPropType
值,指定屬性的類型。

vtsParams
以空格分隔 VTS_* 的 variant 參數類型字串,每個參數各一個。

備註

不同于DISP_PROPERTY_EX宏,這個宏可讓您指定 屬性的參數清單。 這適用于實作已編制索引或參數化的屬性。

範例

請考慮下列 get 和 set 成員函式的宣告,以允許使用者在存取 屬性時要求特定資料列和資料行:

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

這些對應至控制項分派對應中的下列DISP_PROPERTY_PARAM宏:

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

另一個範例中,請考慮下列 get 和 set 成員函式:

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

這些對應至控制項分派對應中的下列DISP_PROPERTY_PARAM宏:

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

需求

標頭: afxdisp.h

DISP_DEFVALUE

將現有的屬性設為物件的預設值。

DISP_DEFVALUE(theClass, pszName)

參數

theClass
類別的名稱。

pszName
屬性外部名稱,表示物件的「值」。

備註

使用預設值可以使設計 Visual Basic 應用程式的自動化物件時更為簡單。

您的物件的「預設值」就是物件的參考不指定屬性或成員函式時,所擷取或設定的屬性。

需求

標頭: afxdisp.h

另請參閱

宏和全域