2009-03-08 17 views
0

ATL(Visual Studio 2008)を使用してWindowsシェル拡張を作成しました。 > - Vista(IShellFolder)のシェル拡張のデバッグに関する問題

  • IContextMenu/IShellExtInit Windowsエクスプローラで>仮想ドライブについて -

    1. IShellFolder/IShellView - :それは、以下のモジュールがあり、各モジュールは、登録のために、独自の.RGSファイルを持つ独立したATLシンプルオブジェクトでありますポップアップ用のメニューファイルとフォルダ
    2. IShellIconOverlayIdentifierは - >ファイルのカスタムプロパティページの場合&フォルダのプロパティ
    - オーバーレイファイルのアイコンやフォルダ
  • IShellPropSheetExt/IShellExtInitを表示するには、

    上記はWinXPでうまく動作し、WinXPでこのシェル拡張をデバッグすることができます。しかし、すぐにVistaに切り替えると、私は(2)と(4)のメソッド呼び出ししか得られません。ドライブはWindowsエクスプローラで作成されますが、クリックすると基本的なメソッドは呼び出されません。 私が右クリックすると(2)が呼び出されますが、ファイルまたはフォルダの「プロパティ」を選択すると、(4)のコードが表示されます。

    Vista上で(1)と(3)に欠けているインタフェースがありますか?私は、MSDNのVista用シェル拡張を記述するための完全で詳細な文書を見つけることができませんでした。私はすでにシェル拡張に関するCodeProjectの記事を読んでいました。

  • 答えて

    0

    拡張機能が適切に初期化を処理していることを確認してください。そうしないと、verclsid.exeによって拡張機能がロードされません。 verclsid.exeは最初にシェル拡張を読み込み、シェルに「ok」を送信してからその拡張子を読み込むことが安全であることを示す前に、それらのシェル拡張を素早くチェックします。

    verclsid.exeの詳細については、hereを参照してください。

    +0

    私はかなりソリューション権を得ることができませんでした。私は、ファイアウォールの "許可"リストにverclsid.exeを含めましたが、デバッグを開始すると、 'explorer.exe'が表示されます: '\ Debug \ ShellExtension.dll'がロードされました 'explorer.exe':アンロード '.. 。\ Debug \ ShellExtension.dll ' ブレークポイントにヒットしません。 – A9S6

    +0

    ファイアウォールとは関係ありません。あなたがdll init関数(あなたは決して*行うべきではない)の中でいくつかのネットワークをやっていない限り。 デバッグウィンドウの "(un)loaded"行はここでは役に立ちません。 dllがロードされているプロセスのinit関数をチェックインできます。 – Stefan

    +0

    私は遅い返事をお詫びします、私は離れていました。 Init関数は、dllmain()を意味しますか?そこに、私はあまりしていません :: CoInitialize(NULL); if(dwReason == DLL_PROCESS_ATTACH) { _AtlModule.Init(); :: DisableThreadLibraryCalls(hInstance); } hInstance; 戻り値_AtlModule.DllMain(dwReason、lpReserved); – A9S6

    関連する問題