ホーム › System.Com.CallObj › ICallFrame
ICallFrame
COMメソッド 19
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
vtbl 3 HRESULT GetInfo(CALLFRAMEINFO* pInfo)
| pInfo | CALLFRAMEINFO* | out | 呼び出しフレームに関する情報(引数の数やスタックサイズなど)を受け取る CALLFRAMEINFO 構造体へのポインタである。 |
| pIID | GUID* | out | 呼び出されたインターフェイスの IID を受け取る GUID へのポインタである。不要な場合は NULL を指定できる。 |
| piMethod | DWORD* | out | 呼び出されたメソッドの vtable 内インデックスを受け取る。不要な場合は NULL を指定できる。 |
| pwszInterface | LPWSTR* | out | インターフェイス名を受け取る文字列ポインタへのポインタである。不要な場合は NULL を指定できる。 |
| pwszMethod | LPWSTR* | out | メソッド名を受け取る文字列ポインタへのポインタである。不要な場合は NULL を指定できる。 |
vtbl 6 void* GetStackLocation()
vtbl 7 void SetStackLocation(void* pvStack)
| pvStack | void* | in | 呼び出しフレームが参照するスタックメモリの位置へのポインタを指定する。 |
vtbl 8 void SetReturnValue(HRESULT hr)
| hr | HRESULT | in | 呼び出しの戻り値として設定する HRESULT を指定する。 |
vtbl 9 HRESULT GetReturnValue()
vtbl 10 HRESULT GetParamInfo(DWORD iparam, CALLFRAMEPARAMINFO* pInfo)
| iparam | DWORD | in | 情報を取得する引数の 0 始まりのインデックスを指定する。 |
| pInfo | CALLFRAMEPARAMINFO* | out | 指定した引数の型や入出力方向などの情報を受け取る CALLFRAMEPARAMINFO 構造体へのポインタである。 |
| iparam | DWORD | in | 値を設定する引数の 0 始まりのインデックスを指定する。 |
| pvar | VARIANT* | in | 引数に設定する値を格納した VARIANT へのポインタである。 |
| iparam | DWORD | in | 値を取得する引数の 0 始まりのインデックスを指定する。 |
| pvar | VARIANT* | out | 指定した引数の値を受け取る VARIANT へのポインタである。 |
vtbl 13 HRESULT Copy(CALLFRAME_COPY copyControl, ICallFrameWalker* pWalker, ICallFrame** ppFrame)
| copyControl | CALLFRAME_COPY | in | コピー時の引数の扱いを制御する CALLFRAME_COPY 値を指定する。 |
| pWalker | ICallFrameWalker* | in | コピー対象のインターフェイスポインタを処理するための ICallFrameWalker へのポインタである。不要な場合は NULL を指定できる。 |
| ppFrame | ICallFrame** | out | コピーされた呼び出しフレームを受け取る ICallFrame ポインタへのポインタである。 |
vtbl 14 HRESULT Free(ICallFrame* pframeArgsDest, ICallFrameWalker* pWalkerDestFree, ICallFrameWalker* pWalkerCopy, DWORD freeFlags, ICallFrameWalker* pWalkerFree, DWORD nullFlags)
| pframeArgsDest | ICallFrame* | in | 解放対象の引数をコピーする先の呼び出しフレームへのポインタである。不要な場合は NULL を指定できる。 |
| pWalkerDestFree | ICallFrameWalker* | in | コピー先の解放対象インターフェイスを処理する ICallFrameWalker へのポインタである。 |
| pWalkerCopy | ICallFrameWalker* | in | コピー対象のインターフェイスを処理する ICallFrameWalker へのポインタである。 |
| freeFlags | DWORD | in | 解放処理の動作を制御するフラグを指定する。 |
| pWalkerFree | ICallFrameWalker* | in | 解放対象のインターフェイスを処理する ICallFrameWalker へのポインタである。 |
| nullFlags | DWORD | in | 解放後にどの値を NULL クリアするかを制御するフラグを指定する。 |
vtbl 15 HRESULT FreeParam(DWORD iparam, DWORD freeFlags, ICallFrameWalker* pWalkerFree, DWORD nullFlags)
| iparam | DWORD | in | 解放する引数の 0 始まりのインデックスを指定する。 |
| freeFlags | DWORD | in | 解放処理の動作を制御するフラグを指定する。 |
| pWalkerFree | ICallFrameWalker* | in | 解放対象のインターフェイスを処理する ICallFrameWalker へのポインタである。 |
| nullFlags | DWORD | in | 解放後の NULL クリアの動作を制御するフラグを指定する。 |
vtbl 16 HRESULT WalkFrame(DWORD walkWhat, ICallFrameWalker* pWalker)
| walkWhat | DWORD | in | ウォーク対象とする引数の種類(入力・出力など)を指定するフラグである。 |
| pWalker | ICallFrameWalker* | in | 各インターフェイスポインタを処理するコールバックである ICallFrameWalker へのポインタである。 |
vtbl 17 HRESULT GetMarshalSizeMax(CALLFRAME_MARSHALCONTEXT* pmshlContext, MSHLFLAGS mshlflags, DWORD* pcbBufferNeeded)
| pmshlContext | CALLFRAME_MARSHALCONTEXT* | in | マーシャリングのコンテキスト情報を保持する CALLFRAME_MARSHALCONTEXT へのポインタである。 |
| mshlflags | MSHLFLAGS | in | マーシャリングの動作を制御する MSHLFLAGS 値を指定する。 |
| pcbBufferNeeded | DWORD* | out | マーシャリングに必要な最大バッファサイズをバイト単位で受け取る。 |
vtbl 18 HRESULT Marshal(CALLFRAME_MARSHALCONTEXT* pmshlContext, MSHLFLAGS mshlflags, void* pBuffer, DWORD cbBuffer, DWORD* pcbBufferUsed, DWORD* pdataRep, DWORD* prpcFlags)
| pmshlContext | CALLFRAME_MARSHALCONTEXT* | in | マーシャリングのコンテキスト情報を保持する CALLFRAME_MARSHALCONTEXT へのポインタである。 |
| mshlflags | MSHLFLAGS | in | マーシャリングの動作を制御する MSHLFLAGS 値を指定する。 |
| pBuffer | void* | in | マーシャリングしたデータを書き込むバッファへのポインタである。 |
| cbBuffer | DWORD | in | pBuffer が指すバッファのサイズをバイト単位で指定する。 |
| pcbBufferUsed | DWORD* | out | 実際に使用されたバッファのバイト数を受け取る。 |
| pdataRep | DWORD* | out | マーシャリングされたデータのデータ表現(エンディアンや文字コードなど)を受け取る。 |
| prpcFlags | DWORD* | out | RPC 関連のフラグを受け取る。 |
vtbl 19 HRESULT Unmarshal(void* pBuffer, DWORD cbBuffer, DWORD dataRep, CALLFRAME_MARSHALCONTEXT* pcontext, DWORD* pcbUnmarshalled)
| pBuffer | void* | in | アンマーシャリングするマーシャリング済みデータを格納したバッファへのポインタである。 |
| cbBuffer | DWORD | in | pBuffer が指すバッファのサイズをバイト単位で指定する。 |
| dataRep | DWORD | in | バッファ内データのデータ表現(エンディアンや文字コードなど)を指定する。 |
| pcontext | CALLFRAME_MARSHALCONTEXT* | in | アンマーシャリングのコンテキスト情報を保持する CALLFRAME_MARSHALCONTEXT へのポインタである。 |
| pcbUnmarshalled | DWORD* | out | アンマーシャリングで消費されたバイト数を受け取る。 |
vtbl 20 HRESULT ReleaseMarshalData(void* pBuffer, DWORD cbBuffer, DWORD ibFirstRelease, DWORD dataRep, CALLFRAME_MARSHALCONTEXT* pcontext)
| pBuffer | void* | in | 解放対象のマーシャリング済みデータを格納したバッファへのポインタである。 |
| cbBuffer | DWORD | in | pBuffer が指すバッファのサイズをバイト単位で指定する。 |
| ibFirstRelease | DWORD | in | 解放を開始するバッファ内のオフセットをバイト単位で指定する。 |
| dataRep | DWORD | in | バッファ内データのデータ表現を指定する。 |
| pcontext | CALLFRAME_MARSHALCONTEXT* | in | マーシャリングのコンテキスト情報を保持する CALLFRAME_MARSHALCONTEXT へのポインタである。 |
vtbl 21 HRESULT Invoke(void* pvReceiver)
| pvReceiver | void* | in | 呼び出しを実際に転送する対象オブジェクト(レシーバー)へのポインタを指定する。 |
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
出力引数:
#define global IID_ICallFrame "{D573B4B0-894E-11D2-B8B6-00C04FB9618A}" #usecom global ICallFrame IID_ICallFrame "{}" #comfunc global ICallFrame_GetInfo 3 var #comfunc global ICallFrame_GetIIDAndMethod 4 var,var #comfunc global ICallFrame_GetNames 5 var,var #comfunc global ICallFrame_GetStackLocation 6 #comfunc global ICallFrame_SetStackLocation 7 sptr #comfunc global ICallFrame_SetReturnValue 8 int #comfunc global ICallFrame_GetReturnValue 9 #comfunc global ICallFrame_GetParamInfo 10 int,var #comfunc global ICallFrame_SetParam 11 int,var #comfunc global ICallFrame_GetParam 12 int,var #comfunc global ICallFrame_Copy 13 int,sptr,sptr #comfunc global ICallFrame_Free 14 sptr,sptr,sptr,int,sptr,int #comfunc global ICallFrame_FreeParam 15 int,int,sptr,int #comfunc global ICallFrame_WalkFrame 16 int,sptr #comfunc global ICallFrame_GetMarshalSizeMax 17 var,int,var #comfunc global ICallFrame_Marshal 18 var,int,sptr,int,var,var,var #comfunc global ICallFrame_Unmarshal 19 sptr,int,int,var,var #comfunc global ICallFrame_ReleaseMarshalData 20 sptr,int,int,int,var #comfunc global ICallFrame_Invoke 21 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ICallFrame "{D573B4B0-894E-11D2-B8B6-00C04FB9618A}" #usecom global ICallFrame IID_ICallFrame "{}" #comfunc global ICallFrame_GetInfo 3 sptr #comfunc global ICallFrame_GetIIDAndMethod 4 sptr,sptr #comfunc global ICallFrame_GetNames 5 sptr,sptr #comfunc global ICallFrame_GetStackLocation 6 #comfunc global ICallFrame_SetStackLocation 7 sptr #comfunc global ICallFrame_SetReturnValue 8 int #comfunc global ICallFrame_GetReturnValue 9 #comfunc global ICallFrame_GetParamInfo 10 int,sptr #comfunc global ICallFrame_SetParam 11 int,sptr #comfunc global ICallFrame_GetParam 12 int,sptr #comfunc global ICallFrame_Copy 13 int,sptr,sptr #comfunc global ICallFrame_Free 14 sptr,sptr,sptr,int,sptr,int #comfunc global ICallFrame_FreeParam 15 int,int,sptr,int #comfunc global ICallFrame_WalkFrame 16 int,sptr #comfunc global ICallFrame_GetMarshalSizeMax 17 sptr,int,sptr #comfunc global ICallFrame_Marshal 18 sptr,int,sptr,int,sptr,sptr,sptr #comfunc global ICallFrame_Unmarshal 19 sptr,int,int,sptr,sptr #comfunc global ICallFrame_ReleaseMarshalData 20 sptr,int,int,int,sptr #comfunc global ICallFrame_Invoke 21 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。