【问题标题】:Creating a Windows shortcut (shell link) in C++在 C++ 中创建 Windows 快捷方式(shell 链接)
【发布时间】:2023-01-11 07:51:16
【问题描述】:

我想以编程方式创建文件夹的 Windows 快捷方式(.lnk 文件)。为此,我尝试了 this code sn-p。但是,我在C:\Program Files (x86)\Windows Kits\10\Include\10.0.22000.0\um\exdisp.h line 2367 中收到编译错误C2371 'WebBrowser': redefinition; different basic types

这个有C++17 std::filesystem API吗?如果没有,我该如何修复上面的编译错误?即使清理了包含,错误仍然存​​在:

#include <Windows.h>
#include <shlguid.h>
#include <shobjidl_core.h>

使用 mklink 命令产生:
The device does not support symbolic links.
所以这也不起作用,可能是因为这是一个外部 SSD。

我还能尝试什么?

【问题讨论】:

  • 我建议问另一个只关注包含的问题。您遇到的错误与 IShellLink 接口甚至 COM 都没有任何关系。除了问题中的三个 #include 行之外,您的程序中是否没有任何错误?可能是修复安装 Windows SDK 副本的时候了。
  • 如果您想自己解决问题,请在您包含的文件中搜索标识符WebBrowser,并密切注意围绕该代码的#if守卫(您只想跳过它,不需要调用IShellLink)

标签: c++ windows lnk


【解决方案1】:

您链接到的第一个答案是正确的方法。而且它根本不依赖WebBrowser。在包含 windows.h 之前定义一些 NO_XXX 宏可能会有所帮助。

我的ShlGuid.h 的版本比你的稍旧,我明白了

#ifndef NO_SHDOCVW_GUIDS

#ifndef GUID_DEFS_ONLY
#include <exdisp.h>
#include <shldisp.h>
#endif

所以你可以使用NO_SHDOCVW_GUIDS来删除你不想要的麻烦的标题。

如果您想要支持 WebBrowser 和厨房水槽,另一个修复可能是将 #include &lt;windows.h&gt; 移到 ShlGuid.h 之后,例如所示这里:https://stackoverflow.com/a/73422757/103167


链接在文件系统与文件系统之间有很大差异,因此很难标准化。 Shell 链接(.lnk 文件)独立于文件系统,但仅适用于 MS Windows(完全不可移植),这也是对在标准 API 中寻求支持的打击。

【讨论】:

  • 是的,#define NO_SHDOCVW_GUIDS 修复了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-04
  • 1970-01-01
  • 2011-11-09
  • 2017-08-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
相关资源
最近更新 更多