none
MFC プレビュー、サムネイル、フィルタハンドラのデバック RRS feed

  • 質問

  • お世話になります。

    VS2010でMFC(MDI)アプリ構築中です。
    新規にプロジェクトを作成するとき、プレビュー、サムネイル、フィルタもDLLプロジェクトして
    作成できますが、デバック方法がわかりません。

    デバック方法があれば教えてください。

    またこれらのハンドラの関連資料があれば教えてください。

    2012年8月2日 6:51

回答

  • DLLのデバッグは、COMであるかどうかにかかわりなく、そのDLLをロードし、DLLのコードを呼び出すことができるプロセスをホストするEXEをデバッグ対象とする必要があります。

    確実にロードし、実行する方法があれば、エクスプローラである必要はありませんが、サムネイルの作成の機能を切り出しているアプリはないと思いますので、エクスプローラをホストアプリとするのが一番確実だと思います。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク TAKAKUN 2012年8月10日 6:13
    2012年8月3日 12:18

すべての返信

  • プレビュー、サムネイルと、フィルタではなく検索ですよね?これらはすべて、シェル拡張と呼ばれるWindowsエクスプローラ(シェル)の拡張機能用DLLです。

    それぞれ、シェルの機能の拡張で、独自ファイル形式(拡張子をセットした場合だけ出てくるのはそれが理由です)の、ファイルに対し、画像として表示する機能(プレビューとサムネイル)や、IndexService のための検索キーワード設定機能などを提供します。

    プレビューについては IPreviewHandler、サムネイルは IThumbnailProvider 、検索は IFilter が基本となるインターフェースです。それらについてのリファレンスをあたってください。

    そもそも、シェルの拡張とは何か?というあたりは、Shell Developer's Guide あたりからたどっていくことで参照できると思います。ちなみに日本語資料はWindows95のころいくつか書籍があった程度で以後まとまった日本語資料はどこからも出ていません。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    2012年8月2日 9:07
  • ご返事ありがとうございます。

    いろいろ調べていてプレビューに関しては実装できてきたのですが、
    デバックポイントを配置したいというか、実際に実行されているのかを確認したいと思っています。

    たとえば、win7(x64)の環境で、VS2010で32ビットのプレビューハンドらを実装したのですが、
    なかなか表示せず、本当に実行されているのかはまってしまいました。
    (VS2010のテンプレートのレジストリが、64ビットのprevhost.exeを指していたため実行できなかった。)

    実際今はまっているのが、サムネイルで、真っ黒に塗りつぶしたビットマップを返しているのですが、
    ファイルのアイコンを表示しているので、実行されていないとは思っているのですが。。。
    DbgViewも表示しないし、行き詰っています。

    デバック方法があればと思うのですが。。。

    2012年8月2日 15:07
  • x64 OSの場合、64bitのハンドラを用意してやる必要があったと思いますが、私の思い違いかな?

    少なくとも IThumbnailProvider は、HBITMAP(GDIオブジェクト)をやり取りするため、同一プロセス上に存在している必要があるはずです。

    そのあたりがデバッグがうまくいかない理由ではないでしょうか?32bitOSで試してみてはいかがでしょう?


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    2012年8月3日 1:07
  • ご返事ありがとうございます。

    とっちゃんさんのご返事の内容をヒントに、ど調べてみると、
    PDFでも同じ問題が起こっていました。

    つまり、プレビューハンドラの場合は、prevhost.exeの32ビット版を使用するようにレジストリを変更するような記述がありました。

    そして、サムネイルに関しては、
    詳しくは、よくわかりませんでしたが、PDFサムネイルの対策として、32ビット版のサムネイルハンドラはadobeが提供しているので、
    32ビット版のサムネイルハンドラをブリッジする64ビットのDLLを作成した有志の方がいるそうです。

    それを利用した人は、サムネイルが表示ができたそうです。

    インデックスフィルタに関しては、adobeがx64版を提供しているようです。

    つまり、サムネイル、インデックスフィルタに関しては、32ビット版をブリッジするか64ビット版を作成する必要があることがわかりました。

    ただ32ビット版で、デバックするにしても、これらのハンドラを実装したDLLをデバックする方法ってありますか?
    ホストアプリケーションを、Explorerにするべきなのでしょうか。

    2012年8月3日 9:54
  • DLLのデバッグは、COMであるかどうかにかかわりなく、そのDLLをロードし、DLLのコードを呼び出すことができるプロセスをホストするEXEをデバッグ対象とする必要があります。

    確実にロードし、実行する方法があれば、エクスプローラである必要はありませんが、サムネイルの作成の機能を切り出しているアプリはないと思いますので、エクスプローラをホストアプリとするのが一番確実だと思います。


    わんくま同盟,Microsoft MVP for Visual C++(Oct 2005-) http://blogs.wankuma.com/tocchann/

    • 回答としてマーク TAKAKUN 2012年8月10日 6:13
    2012年8月3日 12:18