Win32 API 日本語リファレンス
ホームSystem.ComponentServices › IDispenserDriver

IDispenserDriver

COM
IID208b3651-2b48-11cf-be10-00aa00a2fa25継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

COM+ リソースディスペンサーのホルダーによって呼び出され、リソースの作成、エンリスト、評価、準備、破棄を行います。

メソッド 6

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

vtbl 3 HRESULT CreateResource(UINT_PTR ResTypId, UINT_PTR* pResId, INT* pSecsFreeBeforeDestroy)

リソースを作成します。

ResTypIdUINT_PTRin作成するリソースの種類。
pResIdUINT_PTR*inout新しく作成されたリソースへのハンドル。
pSecsFreeBeforeDestroyINT*inout新しいリソースのタイムアウト。これは、このリソースが破棄されるまでにプール内でアイドル状態のまま存在できる秒数です。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は E_FAIL です。

解説(Remarks)

CreateResource メソッドは、次の場合にディスペンサーマネージャーによって呼び出されます。

vtbl 4 HRESULT RateResource(UINT_PTR ResTypId, UINT_PTR ResId, BOOL fRequiresTransactionEnlistment, DWORD* pRating)

候補リソースがどの程度適合するかを評価します。

ResTypIdUINT_PTRinディスペンサーマネージャーが適合させようとしているリソースの種類。
ResIdUINT_PTRinディスペンサーマネージャーが検討している候補リソース。
fRequiresTransactionEnlistmentBOOLinTRUE の場合、候補リソース (ResId) が選択されると、トランザクションへのエンリストが必要になります。エンリストのコストが高い場合、RateResource はそのようなリソースを、既に正しいトランザクションにエンリストされているリソースよりも低く評価することがあります。
pRatingDWORD*inout

この候補に対するディスペンサーの評価。このパラメーターには次のいずれかの値を指定できます。

意味
0
候補リソースはこの要求には使用できません。リソースは ResTypId 型ではないか、その型に変更できません。
1
候補は適合性が低いものの、使用可能です。ディスペンサーマネージャーは候補の提示を続けます。
2
候補は評価 1 の候補よりも優れています。ディスペンサーマネージャーは候補の提示を続けます。
100
候補は完全に適合します。ディスペンサーマネージャーは候補の提示を停止します。

戻り値

メソッドが成功した場合、戻り値は S_OK です。それ以外の場合は E_FAIL です。

解説(Remarks)

fRequiresTransactionEnlistmentFALSE の場合、このトランザクション内であるオブジェクトにこのリソースが割り当てられ、そのオブジェクトはリソースを使用した後に(明示的に、またはオブジェクトの有効期間終了時に暗黙的に)解放しています。同じトランザクション内の 2 番目のオブジェクトが同様のリソースを要求し、最初のオブジェクトが使用したリソースが検討されます。このリソースは既に正しいトランザクションにエンリストされているため、良い候補となります。

特定の種類のリソースがトランザクションごとに 1 回しか使用できない場合、トランザクション内で既に 1 回使用されたリソースは fRequiresTransactionEnlistmentFALSE であることで識別でき、*pRating=0 を返すことでそれ以上の使用を拒否できます。

vtbl 5 HRESULT EnlistResource(UINT_PTR ResId, UINT_PTR TransId)

リソースをトランザクションにエンリストします。

ResIdUINT_PTRinディスペンサーマネージャーがトランザクション TransId へのエンリストを要求しているリソース。
TransIdUINT_PTRinディスペンサーマネージャーがリソースディスペンサーにリソース ResId をエンリストさせたいトランザクション。ディスペンサーマネージャーは、リソースがどのトランザクションにもエンリストされていないことをリソースディスペンサーが保証すべきことを示すために 0 を渡します。

戻り値

このメソッドは次の値を返すことがあります。

リターンコード 説明
S_OK
メソッドは正常に完了しました。
S_FALSE
リソースはエンリストできません(トランザクションに対応していません)。
E_INVALIDARG
引数のいずれかが無効です。
E_FAIL
メソッドが失敗しました。
vtbl 6 HRESULT ResetResource(UINT_PTR ResId)

リソースを一般インベントリまたはエンリスト済みインベントリに戻す準備をします。

ResIdUINT_PTRinリセットするリソース。

戻り値

このメソッドは次の値を返すことがあります。

リターンコード 説明
S_OK
メソッドは正常に完了しました。
E_INVALIDARG
ResId は有効なリソースハンドルではありません。
E_FAIL
メソッドが失敗しました。

解説(Remarks)

この時点でリソースはまだエンリストされている可能性があるため、ResetResource はエンリストを妨げてはなりません。

vtbl 7 HRESULT DestroyResource(UINT_PTR ResId)

リソースを破棄します。

ResIdUINT_PTRinディスペンサーマネージャーがリソースディスペンサーに破棄を要求しているリソース。

戻り値

このメソッドは次の値を返すことがあります。

リターンコード 説明
S_OK
メソッドは正常に完了しました。
E_NOTIMPL
リソースディスペンサーは数値の RESID をサポートしていません。
E_FAIL
メソッドが失敗しました。
vtbl 8 HRESULT DestroyResourceS(WORD* ResId)

リソースを破棄します(文字列リソース版)。

ResIdWORD*inoutディスペンサーマネージャーがリソースディスペンサーに破棄を要求しているリソース。

戻り値

このメソッドは次の値を返すことがあります。

リターンコード 説明
S_OK
メソッドは正常に完了しました。
E_NOTIMPL
リソースディスペンサーは数値の SRESID をサポートしていません。
E_FAIL
メソッドが失敗しました。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

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

出力引数:
#define global IID_IDispenserDriver "{208B3651-2B48-11CF-BE10-00AA00A2FA25}"
#usecom global IDispenserDriver IID_IDispenserDriver "{}"
#comfunc global IDispenserDriver_CreateResource    3 sptr,var,var
#comfunc global IDispenserDriver_RateResource      4 sptr,sptr,int,var
#comfunc global IDispenserDriver_EnlistResource    5 sptr,sptr
#comfunc global IDispenserDriver_ResetResource     6 sptr
#comfunc global IDispenserDriver_DestroyResource   7 sptr
#comfunc global IDispenserDriver_DestroyResourceS  8 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。