IQueryForm
COM公式ドキュメント
クエリフォーム拡張オブジェクトによって実装され、フォームオブジェクトがシステム提供のディレクトリサービスクエリダイアログボックスにフォームやページを追加できるようにします。
解説(Remarks)
クエリフォーム拡張オブジェクトをクエリハンドラーから利用できるようにするには、Windows レジストリに登録する必要があります。これは、次のレジストリキーを追加することで行います。
HKEY_CLASSES_ROOT
CLSID
<クエリハンドラーの CLSID>
Forms
<クエリフォーム拡張の名前>
<クエリハンドラーの CLSID> キーは、フォームハンドラーのクラス識別子です。<クエリフォーム拡張の名前> キーは、クエリフォーム拡張の一意な名前です。この名前は Forms キー内で一意である必要があります。名前には、クエリフォーム拡張のクラス識別子の文字列形式を使用することを推奨します。
次のリストは、上記のキーの下にあるレジストリエントリを示します。
| レジストリエントリ | 説明 |
|---|---|
| CLSID | IQueryForm を実装するオブジェクトのクラス識別子を格納する文字列値です。 |
| Flags |
フォームの動作を定義するフラグのセットを格納する数値です。0、または次の値の 1 つ以上を組み合わせて指定できます。
|
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
クエリフォーム拡張オブジェクトを初期化します。
| hkForm | HKEY | in | クエリフォームオブジェクトの取得元を識別するレジストリキーを格納します。このパラメーターは NULL の場合があります。 |
戻り値
クエリフォーム拡張オブジェクトがクエリダイアログボックスにフォームを追加できるようにするために呼び出されます。
| pAddFormsProc | LPCQADDFORMSPROC | in | CQAddFormsProc 形式のコールバック関数へのポインターです。クエリフォーム拡張は、追加する各フォームに対して、指定された lParam を渡してこの関数を 1 回呼び出します。 |
| lParam | LPARAM | in | クエリハンドラーによって定義される 32 ビット値を格納します。この値は、CQAddFormsProc の呼び出しで lParam パラメーターとして渡す必要があります。 |
戻り値
成功した場合は S_OK を、それ以外の場合は標準の HRESULT 失敗コードを返します。
クエリフォームオブジェクトが既存のフォームにページを追加できるようにするために呼び出されます。
| pAddPagesProc | LPCQADDPAGESPROC | in | CQAddPagesProc 形式のコールバック関数へのポインターです。クエリフォーム拡張は、フォームに追加する各ページに対して、指定された lParam を渡してこの関数を 1 回呼び出します。 |
| lParam | LPARAM | in | クエリハンドラーによって定義される 32 ビット値を格納します。この値は、CQAddPagesProc の呼び出しで lParam パラメーターとして渡す必要があります。 |
戻り値
成功した場合は S_OK を、それ以外の場合は標準の HRESULT 失敗コードを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IQueryForm "{8CFCEE30-39BD-11D0-B8D1-00A024AB2DBB}"
#usecom global IQueryForm IID_IQueryForm "{}"
#comfunc global IQueryForm_Initialize 3 sptr
#comfunc global IQueryForm_AddForms 4 sptr,sptr
#comfunc global IQueryForm_AddPages 5 sptr,sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。