Поставщик миниатюр не работает - PullRequest
4 голосов
/ 29 апреля 2010

Я пытаюсь написать обработчик миниатюр Windows Explorer для нашего пользовательского типа файла.У меня это нормально работает для панели предварительного просмотра, но у меня возникают проблемы с настройкой ее работы для миниатюр.

Кажется, что Windows даже не пытается вызвать точку входа DllGetClassObject.

Прежде чем продолжить, обратите внимание, что я использую Windows 7 и неуправляемый 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 не отображается в окне вывода). Обратите внимание, что я попытался установить «DesktopProcess» в реестре, как описано вдокументы WinSDK для отладки оболочки, но я все еще вижу только один explorer.exe в диспетчере задач - так что, может быть, поэтому я не могу его отладить ??

Любая помощь с этим могла быс благодарностью!

С уважением, Дан.

Ответы [ 2 ]

5 голосов
/ 04 мая 2010

Я наткнулся на это, так как вы упомянули мой блог (codemonkeycodes.com).

Какие у вас проблемы с моим образцом? Вы зарегистрировали свою DLL, используя regsvr32? На какой версии Windows 7 вы работаете: 32 или 64?


Обновление:

Я не могу сказать, что работает или не работает для вас. Я только что скачал образец с моего сайта, следовал инструкциям и изменил функцию 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, а затем создал новый файл с соответствующим расширением, и у меня был красивый черный эскиз.

Хотел бы я помочь тебе. Может быть, вы хотите отправить мне свой код по электронной почте?

1 голос
/ 10 октября 2010

У меня точно такая же проблема. Я не могу сделать SDK или любой пример работы. Мне нужен пример COM, потому что я должен вызвать Microsoft.Jet.OLEDB.4.0, который работает только в 32-битной системе.

Я не могу сделать эту работу: ссылка

Это работает, если при компиляции указано AnyCPU. Не могу заставить его работать на x86: ссылка

Это было приятно под XP, работает как шарм: ссылка

В этом шоу у Adobe возникли проблемы с миниатюрой MS с Office 2007 (32 бита): ссылка

...