IDispenserDriver
COM公式ドキュメント
COM+ リソースディスペンサーのホルダーによって呼び出され、リソースの作成、エンリスト、評価、準備、破棄を行います。
メソッド 6
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
リソースを作成します。
| ResTypId | UINT_PTR | in | 作成するリソースの種類。 |
| pResId | UINT_PTR* | inout | 新しく作成されたリソースへのハンドル。 |
| pSecsFreeBeforeDestroy | INT* | inout | 新しいリソースのタイムアウト。これは、このリソースが破棄されるまでにプール内でアイドル状態のまま存在できる秒数です。 |
戻り値
解説(Remarks)
CreateResource メソッドは、次の場合にディスペンサーマネージャーによって呼び出されます。
- リソースが必要とされ、インベントリ内にリソースが見つからず、IHolder::AllocResource 呼び出しを満たすインベントリが存在しない場合。
- ディスペンサーマネージャーが初期インベントリを設定する場合。
候補リソースがどの程度適合するかを評価します。
| ResTypId | UINT_PTR | in | ディスペンサーマネージャーが適合させようとしているリソースの種類。 | ||||||||||
| ResId | UINT_PTR | in | ディスペンサーマネージャーが検討している候補リソース。 | ||||||||||
| fRequiresTransactionEnlistment | BOOL | in | TRUE の場合、候補リソース (ResId) が選択されると、トランザクションへのエンリストが必要になります。エンリストのコストが高い場合、RateResource はそのようなリソースを、既に正しいトランザクションにエンリストされているリソースよりも低く評価することがあります。 | ||||||||||
| pRating | DWORD* | inout | この候補に対するディスペンサーの評価。このパラメーターには次のいずれかの値を指定できます。
|
戻り値
解説(Remarks)
fRequiresTransactionEnlistment が FALSE の場合、このトランザクション内であるオブジェクトにこのリソースが割り当てられ、そのオブジェクトはリソースを使用した後に(明示的に、またはオブジェクトの有効期間終了時に暗黙的に)解放しています。同じトランザクション内の 2 番目のオブジェクトが同様のリソースを要求し、最初のオブジェクトが使用したリソースが検討されます。このリソースは既に正しいトランザクションにエンリストされているため、良い候補となります。
特定の種類のリソースがトランザクションごとに 1 回しか使用できない場合、トランザクション内で既に 1 回使用されたリソースは fRequiresTransactionEnlistment が FALSE であることで識別でき、*pRating=0 を返すことでそれ以上の使用を拒否できます。
リソースをトランザクションにエンリストします。
| ResId | UINT_PTR | in | ディスペンサーマネージャーがトランザクション TransId へのエンリストを要求しているリソース。 |
| TransId | UINT_PTR | in | ディスペンサーマネージャーがリソースディスペンサーにリソース ResId をエンリストさせたいトランザクション。ディスペンサーマネージャーは、リソースがどのトランザクションにもエンリストされていないことをリソースディスペンサーが保証すべきことを示すために 0 を渡します。 |
戻り値
このメソッドは次の値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| リソースはエンリストできません(トランザクションに対応していません)。 | |
| 引数のいずれかが無効です。 | |
| メソッドが失敗しました。 |
リソースを一般インベントリまたはエンリスト済みインベントリに戻す準備をします。
| ResId | UINT_PTR | in | リセットするリソース。 |
戻り値
このメソッドは次の値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| ResId は有効なリソースハンドルではありません。 | |
| メソッドが失敗しました。 |
解説(Remarks)
この時点でリソースはまだエンリストされている可能性があるため、ResetResource はエンリストを妨げてはなりません。
リソースを破棄します。
| ResId | UINT_PTR | in | ディスペンサーマネージャーがリソースディスペンサーに破棄を要求しているリソース。 |
戻り値
このメソッドは次の値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| リソースディスペンサーは数値の RESID をサポートしていません。 | |
| メソッドが失敗しました。 |
リソースを破棄します(文字列リソース版)。
| ResId | WORD* | inout | ディスペンサーマネージャーがリソースディスペンサーに破棄を要求しているリソース。 |
戻り値
このメソッドは次の値を返すことがあります。
| リターンコード | 説明 |
|---|---|
| メソッドは正常に完了しました。 | |
| リソースディスペンサーは数値の SRESID をサポートしていません。 | |
| メソッドが失敗しました。 |
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 指定が可能。#define global IID_IDispenserDriver "{208B3651-2B48-11CF-BE10-00AA00A2FA25}" #usecom global IDispenserDriver IID_IDispenserDriver "{}" #comfunc global IDispenserDriver_CreateResource 3 sptr,sptr,sptr #comfunc global IDispenserDriver_RateResource 4 sptr,sptr,int,sptr #comfunc global IDispenserDriver_EnlistResource 5 sptr,sptr #comfunc global IDispenserDriver_ResetResource 6 sptr #comfunc global IDispenserDriver_DestroyResource 7 sptr #comfunc global IDispenserDriver_DestroyResourceS 8 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。