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 呼び出しのコンテキストを記述するフラグ。
pparams
引数の配列、名前付き引数の引数 DISPID の配列、配列内の要素の数を含む構造体へのポインター。
pvarResult
結果が格納される場所へのポインター。呼び出し元が結果を期待しない場合は Null。 DISPATCH_PROPERTYPUTまたはDISPATCH_PROPERTYPUTREFが指定されている場合、この引数は無視されます。
pexcepinfo
例外情報を含む構造体へのポインター。 DISP_E_EXCEPTIONが返される場合は、この構造体を入力する必要があります。
puArgErr
エラーが発生した最初の引数の rgvarg 内のインデックス。 引数は pdispparams-rgvarg> に逆順に格納されるため、最初の引数は配列内で最も高いインデックスを持つ引数です。 このパラメーターは、結果の戻り値がDISP_E_TYPEMISMATCHまたはDISP_E_PARAMNOTFOUND場合にのみ返されます。
戻り値
リターン コード | 説明 |
---|---|
|
正常終了しました。 |
|
DISPPARAMS に提供される要素の数は、メソッドまたはプロパティで受け入れられる引数の数とは異なります。 |
|
DISPPARAMS の引数の 1 つが有効なバリアント型ではありません。 |
|
アプリケーションで例外を発生させる必要があります。 この場合、 pexcepinfo で渡される構造体を入力する必要があります。 |
|
要求されたメンバーが存在しません。 |
|
この IDispatch の実装では、名前付き引数はサポートされていません。 |
|
DISPPARAMS の引数の 1 つを指定した型に強制することはできません。 |
|
パラメーター ID の 1 つが、 メソッドのパラメーターに対応していません。 この場合、 puArgErr はエラーを含む最初の引数に設定されます。 |
|
必須パラメーターが省略されました。 |
|
1 つ以上の引数を強制できませんでした。 rgvarg 内の型が正しくない最初のパラメーターのインデックスは、 puArgErr で返されます。 |
|
パラメーターの 1 つが無効です。 |
|
操作を完了するためのメモリ不足。 |
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 |