Windows 在Vista(IShellFolder)中调试外壳程序扩展时出现问题
我已经使用ATL(VisualStudio2008)创建了一个Windows Shell扩展。它具有以下模块,每个模块都是一个单独的ATL简单对象,具有自己的.rgs文件以进行注册:-Windows 在Vista(IShellFolder)中调试外壳程序扩展时出现问题,windows,shell-extensions,Windows,Shell Extensions,我已经使用ATL(VisualStudio2008)创建了一个Windows Shell扩展。它具有以下模块,每个模块都是一个单独的ATL简单对象,具有自己的.rgs文件以进行注册:- IShellFolder/IShellView->用于windows资源管理器中的虚拟驱动器 IContextMenu/IShellExtInit->用于弹出菜单文件和文件夹 IShellIconOverlayIdentifier-在文件和文件夹上显示覆盖图标 IShellPropSheetText/IShell
是否有一些界面,我错过了(1)和(3)的Vista。我找不到在MSDN上为Vista编写Shell扩展的完整详细文档。我已经阅读了有关shell扩展的CodeProject文章。请确保您的扩展正确处理初始化,否则verclsid.exe将不允许加载您的扩展。 verclsid.exe首先加载外壳扩展,并在向外壳发送“ok”之前对其进行快速检查,以指示加载扩展是安全的
有关verclsid.exe的详细信息,请参阅。问题是因为使用了Xml智能指针。当对它调用Release()时,它出现了问题 检查此链接
我不能完全正确地找到解决方案。我将verclsid.exe包括在防火墙的“允许”列表中,但当我开始调试时,它显示“explorer.exe”:已加载“…\Debug\ShellExtension.dll”“explorer.exe”:已卸载“…\Debug\ShellExtension.dll”,断点未命中。它与防火墙无关。除非您在dll init函数中执行一些网络操作(您永远不应该这样做)。“调试”窗口中的“(未加载)”行在这里没有帮助。您可以在加载dll的进程中检入您的init函数。很抱歉,回复太晚,我不在。你说的Init函数是指dllmain()?在这里,我没有做太多::CoInitialize(NULL);如果(dwReason==DLL_PROCESS_ATTACH){AtlModule.Init();::DisableThreadLibraryCalls(hInstance)}hInstance;返回_AtlModule.DllMain(dwReason,lpReserved);我怀疑IShellFolder和IPersistFolder是否是需要在Vista中实现的唯一接口。可能还有另一个必需的接口不仅仅是dllmain-verclsid还对QueryInterface()进行一些测试,这取决于它在其他一些接口上的扩展。否:Vista不要求实现任何不在XP上的接口。