ディスパッチ マップ

OLE オートメーションには、メソッドを呼び出し、アプリケーション間でプロパティにアクセスする方法が用意されています。 これらの要求をディスパッチするために 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 オートメーションをサポートしている場合、そのクラスは、そのメソッドとプロパティを公開するためのディスパッチ マップを提供する必要があります。

DECLARE_DISPATCH_MAP()

解説

クラス宣言の最後に DECLARE_DISPATCH_MAP マクロを使用します。 次に、クラスのメンバー関数を定義する CPP ファイルでは、BEGIN_DISPATCH_MAP マクロを使用します。 次に、クラスの公開されている各メソッドとプロパティ (DISP_FUNCTION、DISP_PROPERTY など) のマクロ エントリを含めます。 最後に、END_DISPATCH_MAP マクロを使用します。

Note

DECLARE_DISPATCH_MAP後にメンバーを宣言する場合は、新しいアクセスの種類 ( publicprivateまたは protected) を指定する必要があります。

アプリケーション ウィザードとコード ウィザードは、Automation クラスの作成とディスパッチ マップのメインを支援します。 ディスパッチ マップの詳細については、「Automation サーバー」を参照してください

class CMyServerDoc : public COleServerDoc
{
   DECLARE_DISPATCH_MAP()

   // Remainder of class declaration omitted.

必要条件

ヘッダー: afxwin.h

BEGIN_DISPATCH_MAP

ディスパッチ マップの定義を宣言します。

BEGIN_DISPATCH_MAP(theClass, baseClass)

パラメーター

theClass
このディスパッチ マップを所有するクラスの名前を指定します。

baseClass
クラスの基底クラス名を 指定します

解説

クラスのメンバー関数を定義する実装 (.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
関数のパラメーター リストを指定する 1 つ以上の定数のスペース区切りのリスト。

解説

vtRetVal 引数は VARTYPE 型です。 この引数に使用できる次の値は、列挙体から VARENUM 取得されます。

記号 の戻り値の型 :
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

vtsParams 引数は、定数からVTS_*スペースで区切られた値のリストです。 これらの値の 1 つ以上をスペース (コンマではなく) で区切って指定すると、関数のパラメーター リストが指定されます。 たとえば、 にします。

VTS_I2 VTS_PI2

は、短整数の後に短整数へのポインターが続くリストを指定します。

定数とその意味は VTS_ 次のとおりです。

記号 パラメーターの型
VTS_I2 short
VTS_I4 long
VTS_R4 float
VTS_R8 double
VTS_CY const CY または CY*
VTS_DATE 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 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 パラメーターの解説を参照してください。 DISP_FUNCTION解説に記載されているVT_EMPTYは、プロパティ データ型として使用できません。

必要条件

ヘッダー : 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 DATE
VT_BSTR CString
VT_DISPATCH LPDISPATCH
VT_ERROR SCODE
VT_BOOL BOOL
VT_VARIANT VARIANT
VT_UNKNOWN LPUNKNOWN

必要条件

ヘッダー : afxdisp.h

DISP_PROPERTY_PARAM

個別 Get およびメンバー関数でアクセスされるプロパティを Set 定義します。

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

パラメーター

theClass
クラスの名前

pszExternalName
プロパティの外部名。

pfnGet
プロパティの取得に使用されるメンバー関数の名前。

pfnSet
プロパティの設定に使用されるメンバー関数の名前。

vtPropType
プロパティの型を示す値。

vtsParams
パラメーターごとに 1 つずつ、スペース区切りの VTS_* バリアント パラメーター型の文字列。

解説

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

関連項目

マクロとグローバル