IComponentData
COM公式ドキュメント
IComponentData インターフェイスは、MMC がスナップインと通信できるようにします。IComponent インターフェイスと同様に、IComponentData は通常ドキュメントレベルで実装され、スコープペインに表示される項目(フォルダー)と密接に関連付けられます。
メソッド 7
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IComponentData::Initialize メソッドは、コンソールへのエントリポイントを提供します。
| pUnknown | IUnknown* | in | コンソールの IUnknown インターフェイスへのポインター。このインターフェイスポインターを使用して、 IConsole2 や IConsoleNameSpace2 に対する QueryInterface を呼び出すことができます。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
解説(Remarks)
IComponentData::Initialize は、スナップインが作成され、スコープペインに列挙する項目がある場合に呼び出されます。渡された IUnknown へのポインターは、 IConsole2 や IConsoleNamespace2 などのインターフェイスをコンソールに対して取得するための QueryInterface 呼び出しに使用されます。スナップインは、 IConsole2::QueryScopeImageList も呼び出してスコープペインのイメージリストを取得し、スコープペイン側に表示するイメージを追加する必要があります。
IComponentData::CreateComponent メソッドは、この IComponentData インターフェイスに関連付けられる IComponent のインスタンスを作成します。
| ppComponent | IComponent** | out | 新しく作成された IComponent へのポインターを格納する場所へのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
IComponentData::Notify メソッドは、ユーザーが実行したアクションをスナップインに通知します。
| lpDataObject | IDataObject* | in | 現在選択されている項目のデータオブジェクトへのポインター。 |
| event | MMC_NOTIFY_TYPE | in | ユーザーが実行したアクションを識別します。IComponentData::Notify は次の通知を受け取ることができます。 |
| arg | LPARAM | in | 通知の種類によって異なります。 |
| param3 | LPARAM | in | イベントに付随する追加パラメータで、その意味はイベントの種類により異なる。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
解説(Remarks)
詳細については、個々の通知を参照してください。スナップインは、処理しない通知に対しては S_FALSE を返す必要があります。
IComponentData::Destroy メソッドは、コンソールへのすべての参照を解放します。
戻り値
このメソッドは、次のいずれかの値を返すことができます。
解説(Remarks)
IComponentData::QueryDataObject メソッドは、指定された cookie のコンテキスト情報を取得するために使用できるデータオブジェクトを返します。
| cookie | INT_PTR | in | データオブジェクトを必要とする一意の識別子を指定する値。 |
| type | DATA_OBJECT_TYPES | in | データオブジェクトを次のいずれかとして指定する値。 CCT_SCOPE = 0x8000スコープペインのデータオブジェクト。 CCT_RESULT = 0x8001結果ペインのデータオブジェクト。 CCT_SNAPIN_MANAGER = 0x8002スナップインマネージャーコンテキストのデータオブジェクト。 CCT_UNINITIALIZED = 0xFFFFデータオブジェクトの型が無効です。 これらの定数は、 DATA_OBJECT_TYPES 列挙体のメンバーです。 |
| ppDataObject | IDataObject** | out | 返されるデータオブジェクトのアドレスへのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
解説(Remarks)
これらのデータオブジェクトは、同じスナップインや、それらを必要とする拡張スナップインに渡すことができます。このデータオブジェクトを使用できる MMC インターフェイスには、 IComponent、 IComponentData、 IContextMenuProvider、 IExtendContextMenu、 IExtendPropertySheet2、および IPropertySheetProvider があります。
IComponentData::GetDisplayInfo メソッドは、スコープ項目の表示情報を取得します。
| pScopeDataItem | SCOPEDATAITEM* | inout | SCOPEDATAITEM 構造体へのポインター。入力時、構造体の mask メンバーは必要な情報の種類を指定し、lParam メンバーは対象の項目を識別します。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
解説(Remarks)
pScopeDataItem パラメーターのメンバーに割り当てられたメモリを再割り当てしても安全なのは、次の場合のみです。
- スコープ項目が削除されたとき。
- IComponentData::Destroy が呼び出されたとき。
- そのスコープ項目に対して GetDisplayInfo が再度呼び出されたとき。
IComponentData::CompareObjects メソッドは、QueryDataObject を通じて取得した 2 つのデータオブジェクトをスナップインが比較できるようにします。データオブジェクトは、2 つの異なる IComponentData インスタンスから取得される場合があることに注意してください。
| lpDataObjectA | IDataObject* | in | 比較対象となる、 IDataObject インターフェイスを公開する 1 つ目のデータオブジェクトへのポインター。 |
| lpDataObjectB | IDataObject* | in | 比較対象となる、IDataObject インターフェイスを公開する 2 つ目のデータオブジェクトへのポインター。 |
戻り値
このメソッドは、次のいずれかの値を返すことができます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IComponentData "{955AB28A-5218-11D0-A985-00C04FD8D565}" #usecom global IComponentData IID_IComponentData "{}" #comfunc global IComponentData_Initialize 3 sptr #comfunc global IComponentData_CreateComponent 4 sptr #comfunc global IComponentData_Notify 5 sptr,int,sptr,sptr #comfunc global IComponentData_Destroy 6 #comfunc global IComponentData_QueryDataObject 7 sptr,int,sptr #comfunc global IComponentData_GetDisplayInfo 8 var #comfunc global IComponentData_CompareObjects 9 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IComponentData "{955AB28A-5218-11D0-A985-00C04FD8D565}" #usecom global IComponentData IID_IComponentData "{}" #comfunc global IComponentData_Initialize 3 sptr #comfunc global IComponentData_CreateComponent 4 sptr #comfunc global IComponentData_Notify 5 sptr,int,sptr,sptr #comfunc global IComponentData_Destroy 6 #comfunc global IComponentData_QueryDataObject 7 sptr,int,sptr #comfunc global IComponentData_GetDisplayInfo 8 sptr #comfunc global IComponentData_CompareObjects 9 sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。