c++ - 注册 Microsoft All-In-One 框架提供的 Windows 上下文菜单处理程序(CppShellExtContextMenuHandler 项目)

标签 c++ windows visual-studio-2010 contextmenu windows-shell

我一直在使用 Microsoft 的 All-In-One 框架中的 CppShellExtContextMenuHandler 示例项目向 Windows 上下文菜单添加自定义菜单项 + 图标。

但是,我似乎无法在我以外的其他计算机上注册该示例提供的DLL。该 DLL 由未经修改的代码在 Windows 7 x86 计算机上编译而成,无法在以下平台上运行:

  • 另一台 Windows 7 x86
  • 在 VirtualBox 上全新安装 Windows XP SP3 x86

我得到:

LoadLibrary(CppShellExtContextMenuHandler.dll) Failed to find specified procedure

(已翻译)在 XP 计算机上

The module "CppShellExtContextMenuHandler.dll" failed to load.

Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files.

The specified module could not be found

在另一台 Windows 7 计算机上

我在命令行中使用 Regsvr32 CppShellExtContextMenuHandler.dll 来注册 DLL。

有人遇到过这个问题吗?我错过了什么(依赖项/项目配置)吗? 我不知道如何调试这个。

感谢您的帮助!

PS1:代码可在此处获取:http://1code.codeplex.com/releases/view/71395 ,位于包中的 ./Visual Studio 2010/CppShellExtContextMenuHandler 下。

PS2:示例的编译版本在这里:https://fgt.bo/GmQ

最佳答案

终于找到答案了,感谢Choosing a Deployment Method在 MSDN 上。

要使从 CppShellExtContextMenuHandler 示例编译的 DLL 文件在非开发计算机上工作,您需要将其与其依赖的 VC++ 运行时 DLL 一起使用。

我使用了wonderful tool在客户端(非开发)计算机上获取我的上下文菜单处理程序所依赖的 DLL 的名称(该工具指示目标计算机上缺少哪些 DLL!)。

事实证明,我必须重新分发 [Program Files\Microsoft Visual Studio 10.0\VC\Redist] 中的 msvcr100.dll 和 msvcp100.dll 文件以及 CppShellExtContextMenuHandler.dll 文件才能使其正常工作。

为了使处理程序在 Windows XP 上工作,我还必须替换两次出现的

hr = HRESULT_FROM_WIN32(RegDeleteTree(...

作者:

hr = SHDeleteKey(...

...在 Reg.cpp 文件中。事实上,根据C++ Windows Shell context menu handler Sample ,RegDeleteTree 函数在 XP 上不可用。 SHDeleteKey 是等效的,可以在我测试的所有 Windows 版本上的 Shlwapi.h 中找到。

感谢您花时间阅读并尝试解决此问题!

关于c++ - 注册 Microsoft All-In-One 框架提供的 Windows 上下文菜单处理程序(CppShellExtContextMenuHandler 项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7376996/

相关文章:

visual-studio-2010 - 如何为 SharePoint 2010 Visual Studio 解决方案设置持续部署?

visual-studio - 无法使用 CodeTaskFactory 创建内联构建任务(构建错误 MSB3758 和 CS0012)

c++ - WinAPI ReportEvent - 未安装组件

c++ - 如何使用 libgit2 初始化 git 存储库

visual-studio-2010 - 有没有办法降级已安装的 Visual Studio 2010(试用版)的版本?

c++ - QT - QGraphicsScene 显示不正确(z 缓冲区?)

C++11 局部命名引用返回值(xvalue)?

c++ - 无法将参数的 'double (*)[10]' 转换为 'double*'

c++ - 循环指针数组

c - 如果在目录名称之前放置斜杠 '/',则 fopen 在 C 中失败