【问题标题】:Trying to open a file dialog, where is comdlg32.lib?尝试打开文件对话框,comdlg32.lib 在哪里?
【发布时间】:2020-12-29 19:49:54
【问题描述】:

在 Code::Blocks 20.03 中运行 this code,在我的标头 no joy 中运行 got a #pragma comment(lib, "comctl32.lib")。我知道我需要将它添加到链接器as done here,但comctl32.lib 文件在哪里?

编辑:修复了 Pragma,但问题仍然存在。

【问题讨论】:

  • 这些是 windows api 中的标准 windows 库。对我来说,该文件存在于此处:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um 在 x64、x86、arm 和 arm64 文件夹中。
  • 遵循该路径,10.0.10240.0`, no um` 文件夹,仅ucrt。里面有处理器,每个都有文件libucrt.lib'libucrtd.lib', ucrt.lib, and ucrtd.lib`。
  • 我安装了这些,因为我使用 Visual Studio 2019 社区。我假设您需要下载并安装 Windows SDK,或者可能有一些 mingw 设置。我真的不使用它。
  • 这里有很多链接。您能否将问题自成一体,以便对其他/未来的访问者有用?
  • CodeBlocks 暗示您使用的是 MinGW 而不是 MSVC?那么那些#pragmas 就没有用了,你需要更改链接器设置。你还需要lib??.a,而不是??.lib-lcomdlg32 标志应该开箱即用。至少它在 MSYS2 上对我有用。

标签: c++ winapi


【解决方案1】:

您的#pragma 指定了错误的文件名。 GetOpenFileName()comdlg32.dll 中实现,而不是在 comctl32.dll 中实现。您需要使用的正确 lib 文件名是 comdlg32.lib。这在function's documentation 中有很多说明:

纠正该错误后,如果仍然出现同样的错误,那么您可能没有为您的编译器安装 Windows SDK,或者您没有正确设置编译器的搜索路径来查找 SDK 文件。

【讨论】:

  • Windows SDK:哪一个?我在 8.1 上编码,但想使用一些不推荐使用的东西来实现反向兼容性。 Win10 能用吗?
  • 在这种特殊情况下,这并不重要,因为GetOpenFileName() 已经存在了 20 多年,因此它可以在所有版本的 SDK 中使用。微软不会删除已弃用的 API
  • @KelsonRumak 请不要以使答案无效的方式修改/更新问题。
  • @RemyLebeau Cool,会得到新的
  • @Asteroids 知道了,所以只是对下次修复它的评论。我应该撤消编辑吗?
猜你喜欢
  • 2021-10-28
  • 2019-08-26
  • 2012-04-24
  • 2010-12-11
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2011-12-31
  • 2010-10-22
相关资源
最近更新 更多