C++ 缩略图提供程序不工作

C++ 缩略图提供程序不工作,c++,com,thumbnails,provider,windows-shell,C++,Com,Thumbnails,Provider,Windows Shell,我正在尝试为自定义文件类型编写Windows资源管理器缩略图处理程序。我在预览窗格中可以很好地使用它,但在缩略图中使用它时遇到了问题 Windows似乎甚至没有尝试调用DllGetClassObject入口点 继续之前,注意我使用Windows 7和非托管C++。 我已在注册表中注册了以下值: HKCR\CLSID\<my guid> HKCR\CLSID\<my guid>\InprocServer32 (default value = path to my DLL)

我正在尝试为自定义文件类型编写Windows资源管理器缩略图处理程序。我在预览窗格中可以很好地使用它,但在缩略图中使用它时遇到了问题

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)
HKCR\CLSID\
HKCR\CLSID\\InprocServer32(默认值=指向我的DLL的路径)
HKCR\CLSID\\InprocServer32\ThreadingModel(value=“公寓”)
HKCR\.\shellex\{E357FCCD-A995-4576-B01F-234630154E96}(值=我的guid)
我还尝试过使用WinSDK示例,但没有成功。还有本文()中的示例项目,但这不起作用

我不熟悉shell编程,所以不确定调试这个的最佳方法。我已尝试将调试器附加到explorer.exe,但似乎不起作用(断点被禁用,输出窗口中没有显示任何OutputDebugString)。请注意,我尝试在注册表中设置“DesktopProcess”,如WinSDK文档中所述,用于调试shell,但在任务管理器中我仍然只看到一个explorer.exe,因此“可能”是我无法调试它的原因

在此方面的任何帮助都将不胜感激

问候,,
Dan.

自从你提到我的博客(codemonkeycodes.com)后,我偶然发现了这一点

你对我的样品有什么问题?您是否使用regsvr32注册了DLL?您使用的是什么版本的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,然后创建了一个具有适当扩展名的新文件,tada,我有一个漂亮的黑色缩略图


我希望我能帮助你。也许你想把你的代码发电子邮件给我?

我也有同样的问题。我不能使SDK或任何样品的作品。我需要COM示例,因为我必须调用Microsoft.Jet.OLEDB.4.0,它只能在32位系统上工作

我做不到这一点:

如果在编译时指定了AnyCPU,则此操作有效。无法使其适用于x86:

这在XP下很好,工作起来很有魅力:


此节目显示Adobe在Office 2007(32位)的MS缩图中遇到问题:

Hi。我使用的是x64 Windows7。因为不只是您的示例对我不起作用-MS示例和我自己的代码也不起作用-我猜还有其他问题。由于我对WindowsShell编程还不熟悉(我的背景是应用程序和游戏开发),我真的不知道调试它的最佳方法。我尝试将我的调试器(MS VS 2005)附加到explorer.exe,但我没有看到任何跟踪日志。这是一个愚蠢的问题,我相信你没有忽略这一点,但你是否使用64位版本的regsrv32注册了DLL?是的,我显式键入了\windows\system32\regsvr32.exe。你知道Windows应该在什么时候调用我的DllGetClassObject函数吗?看看它是否达到了目的,这将是非常有用的。另外,调试windows扩展()的MS说明对windows 7不起作用,因为当我单击startmenu中的shutdown时,它会立即关闭,而不显示shutdown对话框。谢谢。这确实为缩略图创建了一个黑色背景。然而,我现在无法阻止它成为黑色背景。如果我把你的代码换成不同的颜色,它仍然是黑色的。如果我注销DLL;搜索整个注册表,删除我的GUID和文件扩展名;搜索整个计算机,删除ThumbnailProvider.dll的所有条目;然后完全重新启动-仍为黑色。这让我推测Windows正在进行某种缓存。如果windows正在缓存,它肯定会解释为什么我在让它工作时遇到这么多麻烦!