DispInvoke 関数 (oleauto.h)

インターフェイスの型情報に基づいて、インターフェイスのメンバー関数を自動的に呼び出します。 型情報を持つインターフェイスを記述し、この 1 つの呼 び出 しを使用してインターフェイスの Invoke を実装できます。

構文

HRESULT DispInvoke(
  void       *_this,
  ITypeInfo  *ptinfo,
  DISPID     dispidMember,
  WORD       wFlags,
  DISPPARAMS *pparams,
  VARIANT    *pvarResult,
  EXCEPINFO  *pexcepinfo,
  UINT       *puArgErr
);

パラメーター

_this

ptinfo で記述された IDispatch インターフェイスの実装。

ptinfo

インターフェイスを記述する型情報。

dispidMember

呼び出されるメンバー。 GETIDsOfNames またはオブジェクトのドキュメントを使用して DISPID を取得します。

wFlags

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

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

pparams

引数の配列、名前付き引数の引数 DISPID の配列、配列内の要素の数を含む構造体へのポインター。

pvarResult

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

pexcepinfo

例外情報を含む構造体へのポインター。 DISP_E_EXCEPTIONが返される場合は、この構造体を入力する必要があります。

puArgErr

エラーが発生した最初の引数の rgvarg 内のインデックス。 引数は pdispparams-rgvarg> に逆順に格納されるため、最初の引数は配列内で最も高いインデックスを持つ引数です。 このパラメーターは、結果の戻り値がDISP_E_TYPEMISMATCHまたはDISP_E_PARAMNOTFOUND場合にのみ返されます。

戻り値

リターン コード 説明
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_PARAMNOTOPTIONAL
必須パラメーターが省略されました。
DISP_E_TYPEMISMATCH
1 つ以上の引数を強制できませんでした。 rgvarg 内の型が正しくない最初のパラメーターのインデックスは、 puArgErr で返されます。
E_INVALIDARG
パラメーターの 1 つが無効です。
E_OUTOFMEMORY
操作を完了するためのメモリ不足。
 

ITypeInfo::Invoke エラーのいずれかを返すこともできます。

注釈

パラメーター _thisは、遅延先のインターフェイスの実装へのポインターです。 DispInvoke はスタック フレームを構築し、標準の強制型変換規則を使用してパラメーターを強制し、それらをスタックにプッシュしてから、VTBL で正しいメンバー関数を呼び出します。

DispInvoke を使用して Invoke を実装Lines.cpp Lines サンプル ファイルの次のコード。 この実装では、 DispInvoke を使用して入力引数を検証します。 セキュリティ リスクを最小限に抑えるために、入力引数のより堅牢な検証を実行するコードを含めます。

STDMETHODIMP
CLines::Invoke(
   DISPID dispidMember,
   REFIID riid,
   LCID lcid,
   WORD wFlags,
   DISPPARAMS * pdispparams,
   VARIANT * pvarResult,
   EXCEPINFO* pexcepinfo,
   UINT * puArgErr)
{
   return DispInvoke(
   this, m_ptinfo,
   dispidMember, wFlags, pdispparams,
   pvarResult, pexcepinfo, puArgErr); 
}

要件

要件
対象プラットフォーム Windows
ヘッダー oleauto.h
Library OleAut32.lib
[DLL] OleAut32.dll

こちらもご覧ください

CreateStdDispatch

ディスパッチ API 関数の作成

IDispatch

IDispatch::Invoke

ITypeInfo::Invoke