IRequiredExtensions
COM公式ドキュメント
IRequiredExtensions インターフェイスは MMC 1.1 で導入されました。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IRequiredExtensions::EnableAllExtensions メソッドは、スナップインに対して登録されているすべての拡張スナップインが必須であることをスナップインが指定できるようにします。
戻り値
このメソッドは、これらの値のいずれかを返すことがあります。
解説(Remarks)
このメソッドが S_OK を返した場合、MMC は登録済みのすべての拡張を追加します。それ以外の値が返された場合、MMC は IRequiredExtensions::GetFirstExtension を呼び出して、スナップインの必須拡張リストの最初の必須拡張の追加を試みます。
必須拡張のいずれかを読み込めない場合、MMC はそれをスキップし、残りの拡張についてスナップインへの問い合わせを続行します。拡張の読み込みに失敗しても、スナップインへの通知は行われません。
すべての拡張が要求された場合、それらはレジストリに見つかった順序で読み込まれます。まず、スナップインに登録されているすべてのノードタイプが読み込まれます。次に、各ノードタイプについて、すべての拡張が次の順序で読み込まれます: 名前空間、コンテキストメニュー、ツールバー、プロパティシート、タスクパッド。
スナップインが、必須拡張スナップインのリストの最初の拡張スナップインを指定できるようにします。
| pExtCLSID | GUID* | out | 必須拡張スナップインのリストの最初のスナップインの CLSID へのポインター。 |
戻り値
このメソッドは、これらの値のいずれかを返すことがあります。
解説(Remarks)
MMC は、 IRequiredExtensions::EnableAllExtensions が S_OK 以外の値を返した場合にこのメソッドを呼び出します。
このメソッドが S_OK を返した場合、MMC は pExtCLSID で指定された拡張スナップインを追加し、その後 IRequiredExtensions::GetNextExtension を呼び出してリストの次の拡張スナップインを取得します。それ以外の値が返された場合、MMC は pExtCLSID で指定された拡張スナップインを追加せず、IRequiredExtensions::GetNextExtension を呼び出さないことで、必須リストを空であるかのように扱います。
スナップインが、必須拡張スナップインのリストの次の拡張スナップインを指定できるようにします。
| pExtCLSID | GUID* | out | 必須拡張スナップインのリストの次のスナップインの CLSID へのポインター。 |
戻り値
このメソッドは、これらの値のいずれかを返すことがあります。
解説(Remarks)
MMC は、 IRequiredExtensions::GetFirstExtension が S_OK 値を返した場合に、このメソッドを最初に呼び出します。MMC は、S_OK 以外の値が返されるまで IRequiredExtensions::GetNextExtension を呼び出して、追加すべき必須拡張のリストを反復処理します。
このメソッドが S_OK を返した場合、MMC は pExtCLSID で指定された拡張スナップインを追加し、その後リストの次の拡張スナップインを取得するために再び IRequiredExtensions::GetNextExtension を呼び出します。
それ以外の値が返された場合、MMC はその戻り値をリストの終端を示すものとみなします。この場合、MMC は pExtCLSID で指定された拡張スナップインを追加せず、IRequiredExtensions::GetNextExtension の呼び出しを停止します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IRequiredExtensions "{72782D7A-A4A0-11D1-AF0F-00C04FB6DD2C}" #usecom global IRequiredExtensions IID_IRequiredExtensions "{}" #comfunc global IRequiredExtensions_EnableAllExtensions 3 #comfunc global IRequiredExtensions_GetFirstExtension 4 var #comfunc global IRequiredExtensions_GetNextExtension 5 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IRequiredExtensions "{72782D7A-A4A0-11D1-AF0F-00C04FB6DD2C}" #usecom global IRequiredExtensions IID_IRequiredExtensions "{}" #comfunc global IRequiredExtensions_EnableAllExtensions 3 #comfunc global IRequiredExtensions_GetFirstExtension 4 sptr #comfunc global IRequiredExtensions_GetNextExtension 5 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。