カスタム ファイル形式をプレビュー ペインに表示するためのエクスプローラー拡張機能を作成しました。これは Windows 7 では正常に機能しますが、Vista では機能しないようです。同じ DLL がサムネイルとプレビュー ウィンドウの両方を処理します。サムネイル側は、Vista と Windows7 の両方で機能します。
コードにログを追加すると、プレビュー ハンドラ クラスではなく、サムネイル クラスに対してのみ DllGetClassObject 関数が呼び出されます。
COM DLL を呼び出すときに、Vista が Windows7 と異なる動作をすることは明らかですか?
レジストリに追加する値は次のとおりです。
HKEY_CLASSES_ROOT\\.<myext>\\(default) = "<myext>.Thumbnail.Handler.1"
HKEY_CLASSES_ROOT\\<myext>.Thumbnail.Handler.1\\ShellEx\\{8895b1c6-b41f-4c1c-a562-0d564250836f}\\(default) = "<myguid>"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\(default) = "<myext> Preview Handler"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\DisplayName = "@ExplorerPreviewHandler.dll,-101"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\Icon = "@ExplorerPreviewHandler.dll,201"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\AppID = "{6d2b5079-2f0b-48dd-ab7f-97cec514d30b}"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\(default) = "<path to my dll>"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ThreadingModel = "Apartment"
HKEY_CLASSES_ROOT\\CLSID\\<myguid>\\InProcServer32\\ProgID = "<myext>.Thumbnail.Handler.1"
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\PreviewHandlers\\<myguid> = "<myext> Preview Handler"},
私の DllGetClassObject が呼び出されていないことを考えると、問題はレジストリに設定しているものに関係していると思いますか? DLL エクスポートは、Vista と Win7 の両方のサムネイルで機能し、Windows7 のプレビュー ペインで機能するため、問題ないことはわかっています。
DLL は x64 であり、Vista と Win7 の両方の OS も同様です。DLL は ATL を使用せずに C++ で記述されています。
これについて何か助けてくれてありがとう、ダン。