IDisplayHelp
COM公式ドキュメント
IDisplayHelp インターフェイスは MMC バージョン 1.1 で導入されました。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDisplayHelp::ShowTopic メソッドは、指定された HTML Help トピックを、マージされた MMC HTML Help ファイルに表示します。
| pszHelpTopic | LPWSTR | in | マージされた MMC HTML Help ファイル内に表示するトピックを指定する、NULL 終端文字列へのポインターです。文字列は次の形式でなければなりません。
ここで helpfilename は、MMC が MMC HTML Help コレクションファイルにマージしたスナップインの HTML Help ファイル (.chm) のファイル名です (これは元の HTML Help ファイルへのパスではなく、ファイル名のみです)。topicfilename は、スナップインの .chm ファイル内のトピックファイルへの内部パスです。トピック HTML ファイルに内部ディレクトリ構造があるか、それともすべてのトピック HTML ファイルが .chm ファイルのルートに配置されるかは、スナップインの HTML Help ファイルの作成者が決定します。 スナップインは、 ISnapinHelp2::GetHelpTopic メソッドの実装内で、自身の .chm ファイルを MMC に通知します。 たとえば、スナップインが HTML Help ファイル mysnapin.chm を MMC HTML Help コレクションファイルにマージし、内部ファイルパスが htm/help01.htm のトピック HTML ファイルを持つ場合、文字列は次の形式になります。
代わりに help01.htm トピックファイルが mysnapin.chm Help ファイルのルートにある場合、文字列は次の形式になります。
トピックの数値 ID のサポートは、バージョン 1.2 以前には含まれていません。 |
戻り値
このメソッドは次のいずれかの値を返すことがあります。
解説(Remarks)
MMC バージョン 1.0 および 1.1 では、pszHelpTopic を COM API 関数 CoTaskMemAlloc で割り当てる必要があり、その後 MMC が文字列を解放していました。これは、入力パラメーターの割り当てと解放の両方を呼び出し側 (スナップイン) が行うことを求める COM の規則に違反していました。MMC 1.2 および MMC 2.0 では、pszHelpTopic を CoTaskMemAlloc で割り当てる必要はなくなりました。呼び出し側は、任意のメモリ管理方法を自由に使用できます。呼び出し側が CoTaskMemAlloc の使用を選択した場合は、文字列を解放するために CoTaskMemFree を呼び出す責任も負います。
スナップインは、 IComponent::Notify メソッド内で MMCN_CONTEXTHELP 通知を処理し、IDisplayHelp::ShowTopic を呼び出すことで、選択された項目のコンテキストヘルプを提供できます。
プロパティページの場合、スナップインは IDisplayHelp::ShowTopic の代わりに MMCPropertyHelp を呼び出す必要があります。MMC のプロパティシートは通常、別のスレッドで実行されるため、プロパティページは IDisplayHelp インターフェイスを直接使用できません。代わりに、プロパティページは MMC ライブラリの MMCPropertyHelp を呼び出すことで、同じ結果を得られます。 MMCPropertyHelp は IDisplayHelp::ShowTopic と同じトピック文字列パラメーターを受け取り、要求をメイン MMC スレッドへマーシャリングする処理を行います。
スナップインが MMCN_CONTEXTHELP 通知を処理する場合、MMC はスナップインが選択された項目に対するヘルプトピックを指定することを期待します。そのため、MMCN_CONTEXTHELP 通知の通知ハンドラー内で、スナップインには次の 2 つの選択肢があります。
- IDisplayHelp::ShowTopic または MMCPropertyHelp を呼び出してヘルプトピックを指定し、成功を示すために S_OK を返すことができます。スナップインがヘルプトピックを指定する場合にのみ S_OK を返すべきであることに注意してください。スナップインがヘルプトピックを指定せずに S_OK を返した場合、ヘルプトピックは表示されません。
- 通知に対して S_FALSE を返すことができます。この場合、MMC は既定の MMC トピックが選択された状態でヘルプコレクションファイルを表示します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDisplayHelp "{CC593830-B926-11D1-8063-0000F875A9CE}"
#usecom global IDisplayHelp IID_IDisplayHelp "{}"
#comfunc global IDisplayHelp_ShowTopic 3 wstr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。