4

カスタムファイルタイプ用のWindowsエクスプローラーサムネイルハンドラーを作成しようとしています。プレビューペインではこれは正常に機能していますが、サムネイルで機能させるのに問題があります。

Windowsは、DllGetClassObjectエントリポイントを呼び出そうとしていないようです。

続行する前に、Windows7とアンマネージC++を使用していることに注意してください。

レジストリに次の値を登録しました。

HKCR\CLSID\<my guid>
HKCR\CLSID\<my guid>\InprocServer32 (default value = path to my DLL)
HKCR\CLSID\<my guid>\InprocServer32\ThreadingModel (value = "Apartment")
HKCR\.<my ext>\shellex\{E357FCCD-A995-4576-B01F-234630154E96} (value = my guid)

Win SDKサンプルも使用してみましたが、機能しません。また、この記事のサンプルプロジェクト(http://www.codemonkeycodes.com/2010/01/11/ithumbnailprovider-re-visited/)も機能しません。

私はシェルプログラミングに慣れていないので、これをデバッグする最良の方法がよくわかりません。デバッガーをexplorer.exeにアタッチしようとしましたが、機能していないようです(ブレークポイントが無効になり、OutputDebugStringsが出力ウィンドウに表示されません)。シェルをデバッグするためにWinSDKドキュメントで説明されているようにレジストリに「DesktopProcess」を設定しようとしましたが、タスクマネージャーにexplorer.exeが1つしか表示されないため、「可能性があります」とは言えません。デバッグしますか?

これに関する助けをいただければ幸いです。

よろしく、ダン。

4

2 に答える 2

5

あなたが私のブログ(codemonkeycodes.com)について言及したので、私はこれに出くわしました。

私のサンプルでどのような問題がありますか?zippy32を使用してDLLを登録しましたか?32または64のどのバージョンのWindows7を使用していますか?


アップデート:

何があなたのために働いているのか、何が働いていないのかは言えません。私は自分のサイトからサンプルをダウンロードし、指示に従い、関数STDMETHODIMP CThumbnailProvider ::GetThumbnail...を次のように変更しました。

{
*phbmp = NULL;
*pdwAlpha = WTSAT_UNKNOWN;

ULONG_PTR token;
GdiplusStartupInput input;
if (Ok == GdiplusStartup(&token, &input, NULL))
{
    //gcImage.LogBuffer();
    Bitmap * pBitmap = new Bitmap(188, 141);
    if( pBitmap )
    {
        Color color(0, 0, 0);
        pBitmap->GetHBITMAP(color, phbmp);
    }
}

GdiplusShutdown(token);

if( *phbmp != NULL )
    return NOERROR;

return E_NOTIMPL;
}

DLLを登録してから、適切な拡張子の新しいファイルを作成しました。多田さん、素敵な黒いサムネイルがありました。

あなたの手助けをすることができればいいのに。たぶんあなたは私にあなたのコードを電子メールで送りたいですか?

于 2010-05-04T16:06:41.460 に答える
1

私はまったく同じ問題を抱えています。SDKやサンプル作品を作成できません。32ビットシステムでのみ動作するMicrosoft.Jet.OLEDB.4.0を呼び出す必要があるため、COMサンプルが必要です。

私はこれを機能させることができませんでした: リンク

これは、コンパイル時にAnyCPUが指定されている場合に機能します。x86で動作するようにすることはできません: リンク

これは、XPが魅力のように機能する場合に便利でした: リンク

このショーAdobeはサムネイルに問題がありましたOffice2007(32ビット)のMS: リンク

于 2010-10-10T12:39:38.323 に答える