IDispatch::Invoke メソッド (oaidl.h)

オブジェクトによって公開されたプロパティおよびメソッドへのアクセスを提供します。 ディスパッチ関数 DispInvoke は、Invoke の標準実装を提供 します

構文

HRESULT Invoke(
  [in]      DISPID     dispIdMember,
  [in]      REFIID     riid,
  [in]      LCID       lcid,
  [in]      WORD       wFlags,
  [in, out] DISPPARAMS *pDispParams,
  [out]     VARIANT    *pVarResult,
  [out]     EXCEPINFO  *pExcepInfo,
  [out]     UINT       *puArgErr
);

パラメーター

[in] dispIdMember

メンバーを識別します。 ディスパッチ識別子を取得するには、 GetIDsOfNames またはオブジェクトのドキュメントを使用します。

[in] riid

将来使用するために予約されています。 IID_NULL にする必要があります。

[in] lcid

引数を解釈する対象のロケール コンテキスト。 lcidGetIDsOfNames 関数によって使用され、オブジェクトがロケールに固有の引数を解釈できるように Invoke にも渡されます。

複数の各国語をサポートしていないアプリケーションでは、このパラメーターを無視できます。 詳細については、「 複数の各国語のサポート 」および 「ActiveX オブジェクトの公開」を参照してください。

[in] wFlags

Invoke 呼び しのコンテキストを記述するフラグ。

意味
DISPATCH_METHOD
メンバーはメソッドとして呼び出されます。 プロパティの名前が同じ場合は、this フラグと DISPATCH_PROPERTYGET フラグの両方を設定できます。
DISPATCH_PROPERTYGET
メンバーは、プロパティまたはデータ メンバーとして取得されます。
DISPATCH_PROPERTYPUT
メンバーは、プロパティまたはデータ メンバーとして変更されます。
DISPATCH_PROPERTYPUTREF
メンバーは、値の割り当てではなく、参照割り当てによって変更されます。 このフラグは、 プロパティがオブジェクトへの参照を受け入れる場合にのみ有効です。

[in, out] pDispParams

引数の配列、名前付き引数の引数 DISPID の配列、および配列内の要素数のカウントを含む DISPPARAMS 構造体へのポインター。

[out] pVarResult

結果が格納される場所へのポインター。呼び出し元が結果を予期しない場合は NULL。 DISPATCH_PROPERTYPUTまたはDISPATCH_PROPERTYPUTREFが指定されている場合、この引数は無視されます。

[out] pExcepInfo

例外情報を格納する構造体へのポインター。 DISP_E_EXCEPTIONが返される場合は、この構造体を入力する必要があります。 NULL にすることができます。

[out] puArgErr

エラーが発生した最初の引数の rgvarg 内のインデックス。 引数は pDispParams-rgvarg> に逆の順序で格納されるため、最初の引数は配列内で最も高いインデックスを持つ引数です。 このパラメーターは、結果の戻り値がDISP_E_TYPEMISMATCHまたはDISP_E_PARAMNOTFOUND場合にのみ返されます。 この引数は null に設定できます。 詳細については、「 エラーを返す」を参照してください。

戻り値

このメソッドは、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK
正常終了しました。
DISP_E_BADPARAMCOUNT
DISPPARAMS に提供される要素の数は、メソッドまたはプロパティで受け入れられる引数の数とは異なります。
DISP_E_BADVARTYPE
DISPPARAMS の引数の 1 つが有効なバリアント型ではありません。
DISP_E_EXCEPTION
アプリケーションで例外を発生させる必要があります。 この場合、 pexcepinfo で渡された構造体を入力する必要があります。
DISP_E_MEMBERNOTFOUND
要求されたメンバーが存在しません。
DISP_E_NONAMEDARGS
この IDispatch の実装では、名前付き引数はサポートされていません。
DISP_E_OVERFLOW
DISPPARAMS の引数の 1 つを指定した型に強制することはできませんでした。
DISP_E_PARAMNOTFOUND
パラメーター ID の 1 つが、 メソッドのパラメーターに対応していません。 この場合、 puArgErr はエラーを含む最初の引数に設定されます。
DISP_E_TYPEMISMATCH
1 つ以上の引数を強制できませんでした。 rgvarg 内の型が正しくない最初のパラメーターのインデックスは、 puArgErr で返されます。
DISP_E_UNKNOWNINTERFACE

riid で渡されたインターフェイス識別子はIID_NULLされていません。
DISP_E_UNKNOWNLCID
呼び出されるメンバーは、LCID に従って文字列引数を解釈し、LCID は認識されません。 引数を解釈するために LCID が必要ない場合は、このエラーを返さないでください
DISP_E_PARAMNOTOPTIONAL
必須パラメーターが省略されました。

注釈

一般に、 Invoke を直接実装しないでください。 代わりに、ディスパッチ インターフェイスを使用して、 関数 CreateStdDispatchDispInvoke を作成します。 詳細については、 CreateStdDispatchDispInvokeIDispatch インターフェイスの作成および ActiveX オブジェクトの公開に関するページを参照してください

メンバーを呼び出す前にアプリケーション固有の処理を実行する必要がある場合、コードは必要なアクションを実行してから 、ITypeInfo::Invoke を呼び出してメンバーを呼び出す必要があります。 ITypeInfo::Invoke は、Invoke とまったく同じように機能 しますCreateStdDispatchDispInvoke によって作成された Invoke の標準実装は、ITypeInfo::Invoke に遅延します。

ActiveX クライアントでは、 Invoke を使用してプロパティの値を取得および設定するか、ActiveX オブジェクトのメソッドを呼び出す必要があります。 dispIdMember 引数は、呼び出すメンバーを識別します。 メンバーを識別する DISPID は、オブジェクトの実装者によって定義され、オブジェクトのドキュメント、 IDispatch::GetIDsOfNames 関数、または ITypeInfo インターフェイスを使用して決定できます。

DISPATCH_PROPERTYPUTまたはDISPATCH_PROPERTYPUTREFで IDispatch::Invoke() を使用する場合は、DISPPARAMS 構造体の cNamedArgs 要素と rgdispidNamedArgs 要素を次のように特別に初期化する必要があります。

DISPID dispidNamed = DISPID_PROPERTYPUT;
dispparams.cNamedArgs = 1;
dispparams.rgdispidNamedArgs = &dispidNamed;

以下の情報は、ActiveX クライアントの開発者や、コードを使用して ActiveX オブジェクトを公開する他のユーザーに対応しています。 公開されたオブジェクトのユーザーが期待する動作について説明します。

要件

要件
対象プラットフォーム Windows
ヘッダー oaidl.h

こちらもご覧ください

IDispatch