Win32 API 日本語リファレンス
ホームSystem.Com.Marshal › IMarshal

IMarshal

COM
IID00000003-0000-0000-c000-000000000046継承元IUnknown自前メソッド開始 vtbl3

メソッド 6

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetUnmarshalClass(GUID* riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, GUID* pCid)
riidGUID*inマーシャリングするインターフェイスの GUID(IID)を指定する。
pvvoid*inoptionalマーシャリング対象のインターフェイスポインタを指定する。NULL も指定できる。
dwDestContextDWORDinマーシャリング先の実行コンテキスト(MSHCTX 値)を指定する。
pvDestContextvoid*optional宛先コンテキストに関する予約済みパラメータであり、NULL を指定する。
mshlflagsDWORDinマーシャリングの目的を示すフラグ(MSHLFLAGS 値)を指定する。
pCidGUID*outアンマーシャリングに使用するプロキシクラスの CLSID を受け取る。
vtbl 4 HRESULT GetMarshalSizeMax(GUID* riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags, DWORD* pSize)
riidGUID*inマーシャリングするインターフェイスの GUID(IID)を指定する。
pvvoid*inoptionalマーシャリング対象のインターフェイスポインタを指定する。NULL も指定できる。
dwDestContextDWORDinマーシャリング先の実行コンテキスト(MSHCTX 値)を指定する。
pvDestContextvoid*optional宛先コンテキストに関する予約済みパラメータであり、NULL を指定する。
mshlflagsDWORDinマーシャリングの目的を示すフラグ(MSHLFLAGS 値)を指定する。
pSizeDWORD*outマーシャルデータの格納に必要なバイト数の最大値を受け取る。
vtbl 5 HRESULT MarshalInterface(IStream* pStm, GUID* riid, void* pv, DWORD dwDestContext, void* pvDestContext, DWORD mshlflags)
pStmIStream*inマーシャルデータを書き込む先の IStream ストリームへのポインタである。
riidGUID*inマーシャリングするインターフェイスの GUID(IID)を指定する。
pvvoid*inoptionalマーシャリング対象のインターフェイスポインタを指定する。
dwDestContextDWORDinマーシャリング先の実行コンテキスト(MSHCTX 値)を指定する。
pvDestContextvoid*optional宛先コンテキストに関する予約済みパラメータであり、NULL を指定する。
mshlflagsDWORDinマーシャリングの目的を示すフラグ(MSHLFLAGS 値)を指定する。
vtbl 6 HRESULT UnmarshalInterface(IStream* pStm, GUID* riid, void** ppv)
pStmIStream*inマーシャルデータを読み込む元の IStream ストリームへのポインタである。
riidGUID*inアンマーシャリングして取得するインターフェイスの GUID(IID)を指定する。
ppvvoid**outアンマーシャリングされたインターフェイスへのポインタを受け取る。
vtbl 7 HRESULT ReleaseMarshalData(IStream* pStm)
pStmIStream*in解放するマーシャルデータが格納された IStream ストリームへのポインタである。
vtbl 8 HRESULT DisconnectObject(DWORD dwReserved)
dwReservedDWORDin予約済みパラメータであり、0 を指定する。

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IMarshal "{00000003-0000-0000-C000-000000000046}"
#usecom global IMarshal IID_IMarshal "{}"
#comfunc global IMarshal_GetUnmarshalClass   3 var,sptr,int,sptr,int,var
#comfunc global IMarshal_GetMarshalSizeMax   4 var,sptr,int,sptr,int,var
#comfunc global IMarshal_MarshalInterface    5 sptr,var,sptr,int,sptr,int
#comfunc global IMarshal_UnmarshalInterface  6 sptr,var,sptr
#comfunc global IMarshal_ReleaseMarshalData  7 sptr
#comfunc global IMarshal_DisconnectObject    8 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。