ISdoCollection
COMIDispatch (デュアル)comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。公式ドキュメント
ISdoCollection インターフェイスは、SDO オブジェクトのコレクションを操作するために使用します。
解説(Remarks)
コレクションを取得するには、コレクションのプロパティを指定して ISdo::GetProperty を呼び出します。詳細については、 Retrieving a Collection を参照してください。
メソッド 8
vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。
get_Count メソッドは、コレクション内の項目数を返します。
| pCount | INT* | out | コレクション内の項目数を格納する LONG へのポインターです。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
Add メソッドは、Server Data Objects (SDO) コレクションに項目を追加します。
| bstrName | LPWSTR | in | SDO オブジェクトの名前を指定します。このパラメーターは NULL でもかまいません。 |
| ppItem | IDispatch** | inout | 追加する項目の IDispatch インターフェイスポインターへのポインターです。このパラメーターを NULL にすることはできません。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
解説(Remarks)
追加するオブジェクトの名前を指定する場合は、 ISdoCollection::IsNameUnique を呼び出して、その名前が一意であることを確認してください。
bstrName パラメーターが指定されていない場合、ISdoCollection::Add は ppItem パラメーターで指定されたオブジェクトから名前を取得します。
Remove メソッドは、指定された項目をコレクションから削除します。
| pItem | IDispatch* | in | 削除する項目を指定する IDispatch インターフェイスへのポインターです。 このパラメーターを NULL にすることはできません。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
RemoveAll メソッドは、コレクションからすべての項目を削除します。
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
Reload メソッドは、コレクション内のすべてのオブジェクトを基になるデータストアから再読み込みします。
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
IsNameUnique メソッドは、指定された名前がコレクション内で一意かどうかをテストします。
| bstrName | LPWSTR | in | テストする名前を指定します。 |
| pBool | VARIANT_BOOL* | out | 名前が一意かどうかを示す VARIANT へのポインターです。名前が一意である場合は VARIANT_TRUE、そうでない場合は VARIANT_FALSE が返されます。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
解説(Remarks)
いずれのパラメーターも NULL にすることはできません。
Item メソッドは、指定された項目をコレクションから取得します。
| Name | VARIANT* | in | VARIANT へのポインターです。オブジェクトの名前を BSTR として、この VARIANT に格納します。 |
| pItem | IDispatch** | out | オブジェクトの IDispatch インターフェイスのアドレスを受け取るインターフェイスポインターへのポインターです。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
オブジェクトがコレクション内に見つからない場合、戻り値は DISP_E_MEMBERNOTFOUND です。
それ以外でメソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
解説(Remarks)
いずれのパラメーターも NULL にすることはできません。
get__NewEnum メソッドは、Server Data Objects (SDO) コレクションの IEnumVARIANT インターフェイスを取得します。
| ppEnumVARIANT | IUnknown** | out | IUnknown インターフェイスポインターへのポインターです。正常に返された場合、この IUnknown インターフェイスポインターは IEnumVARIANT インターフェイスを指します。 このパラメーターを NULL にすることはできません。 |
戻り値
メソッドが成功した場合、戻り値は S_OK です。
メソッドが失敗した場合、戻り値は次のいずれかのエラーコードになります。
解説(Remarks)
このメソッドを呼び出す前に SDO を初期化してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ISdoCollection "{56BC53E2-96DB-11D1-BF3F-000000000000}" #usecom global ISdoCollection IID_ISdoCollection "{}" #comfunc global ISdoCollection_get_Count 7 var #comfunc global ISdoCollection_Add 8 wstr,sptr #comfunc global ISdoCollection_Remove 9 sptr #comfunc global ISdoCollection_RemoveAll 10 #comfunc global ISdoCollection_Reload 11 #comfunc global ISdoCollection_IsNameUnique 12 wstr,var #comfunc global ISdoCollection_Item 13 var,sptr #comfunc global ISdoCollection_get__NewEnum 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。#define global IID_ISdoCollection "{56BC53E2-96DB-11D1-BF3F-000000000000}" #usecom global ISdoCollection IID_ISdoCollection "{}" #comfunc global ISdoCollection_get_Count 7 sptr #comfunc global ISdoCollection_Add 8 wstr,sptr #comfunc global ISdoCollection_Remove 9 sptr #comfunc global ISdoCollection_RemoveAll 10 #comfunc global ISdoCollection_Reload 11 #comfunc global ISdoCollection_IsNameUnique 12 wstr,sptr #comfunc global ISdoCollection_Item 13 sptr,sptr #comfunc global ISdoCollection_get__NewEnum 14 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。 ; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。