IRpcStubBuffer
COM公式ドキュメント
IRpcStubBuffer (objidlbase.h) インターフェイスは、COM コンポーネント間でデータをマーシャリングするために使用される RPC スタブを制御します。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IRpcStubBuffer::Connect (objidlbase.h) メソッドは、サーバースタブを初期化し、指定されたインターフェイスにバインドします。
| pUnkServer | IUnknown* | in | インターフェイスへのポインター。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL、および S_OK を返すことがあります。
IRpcStubBuffer::Disconnect (objidlbase.h) メソッドは、サーバースタブを、接続されている任意のインターフェイスから切断します。
IRpcStubBuffer::Invoke (objidlbase.h) メソッドは、スタブが表すインターフェイスを呼び出します。
| _prpcmsg | RPCOLEMESSAGE* | inout | マーシャリングされた呼び出し引数を含む RPCOLEMESSAGE データ構造へのポインター。 |
| _pRpcChannelBuffer | IRpcChannelBuffer* | in | RPC マーシャリングチャネルを制御する IRpcChannelBuffer インターフェイスへのポインター。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL、および S_OK を返すことがあります。
IRpcStubBuffer::IsIIDSupported (objidlbase.h) メソッドは、スタブが特定のインターフェイスのアンマーシャリングを処理するように設計されているかどうかを判定します。
| riid | GUID* | in | インターフェイスの IID。このパラメーターに IID_IUnknown を指定することはできません。 |
戻り値
スタブが指定されたインターフェイスを処理できる場合、このメソッドはそのインターフェイスに対する IRpcStubBuffer ポインターを返します。それ以外の場合は NULL を返します。
解説(Remarks)
特定のオブジェクトで新しい IID をリモート化する必要が生じた場合、RPC ランタイムは通常、新しいスタブを作成する手間をかける前に、要求のマーシャリングを処理できるものを見つけようとして、現在接続されているすべてのインターフェイススタブに対してこのメソッドを呼び出します。
IPSFactoryBuffer::CreateStub と同様に、スタブが現在サーバーオブジェクトに接続されている場合、このメソッドはスタブが指定されたインターフェイスを処理できることを検証するだけでなく、接続されているサーバーオブジェクトが実際に指定されたインターフェイスをサポートしていることも (QueryInterface を使用して) 検証する必要があります。IID とそれまでのインターフェイス処理要求によっては、すでに検証済みの場合もあります。
IRpcStubBuffer::CountRefs (objidlbase.h) メソッドは、スタブが接続先のサーバーオブジェクトに対して保持している参照の総数を取得します。
戻り値
このメソッドは、スタブが接続先のサーバーオブジェクトに対して保持している参照の総数を返します。
IRpcStubBuffer::DebugServerQueryInterface (objidlbase.h) メソッドは、スタブが表すインターフェイスへのポインターを取得します。
| ppv | void** | out | スタブが表すインターフェイスへのポインター。 |
戻り値
このメソッドは、標準の戻り値 E_INVALIDARG、E_OUTOFMEMORY、E_UNEXPECTED、E_FAIL、および S_OK を返すことがあります。
IRpcStubBuffer::DebugServerRelease (objidlbase.h) メソッドは、以前に DebugServerQueryInterface によって返されたインターフェイスポインターを解放します。
| pv | void* | in | 呼び出し元が不要になったインターフェイスへのポインター。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IRpcStubBuffer "{D5F56AFC-593B-101A-B569-08002B2DBF7A}" #usecom global IRpcStubBuffer IID_IRpcStubBuffer "{}" #comfunc global IRpcStubBuffer_Connect 3 sptr #comfunc global IRpcStubBuffer_Disconnect 4 #comfunc global IRpcStubBuffer_Invoke 5 var,sptr #comfunc global IRpcStubBuffer_IsIIDSupported 6 var #comfunc global IRpcStubBuffer_CountRefs 7 #comfunc global IRpcStubBuffer_DebugServerQueryInterface 8 sptr #comfunc global IRpcStubBuffer_DebugServerRelease 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IRpcStubBuffer "{D5F56AFC-593B-101A-B569-08002B2DBF7A}" #usecom global IRpcStubBuffer IID_IRpcStubBuffer "{}" #comfunc global IRpcStubBuffer_Connect 3 sptr #comfunc global IRpcStubBuffer_Disconnect 4 #comfunc global IRpcStubBuffer_Invoke 5 sptr,sptr #comfunc global IRpcStubBuffer_IsIIDSupported 6 sptr #comfunc global IRpcStubBuffer_CountRefs 7 #comfunc global IRpcStubBuffer_DebugServerQueryInterface 8 sptr #comfunc global IRpcStubBuffer_DebugServerRelease 9 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。