【问题标题】:Is there posibility to insert binary file as resource to VS project with cmake?是否可以使用 cmake 将二进制文件作为资源插入 VS 项目?
【发布时间】:2021-07-30 12:10:20
【问题描述】:

我尝试构建 exe,它将显示编译成 exe 的静态 bmp 图像。但我不能这样做,因为预处理器在以下 winapi 代码中找不到文件的定义:

case WM_PAINT :
        hDC = BeginPaint(hWnd, &PaintStruct);
        hBitmap = LoadImage(NULL, MAKEINTRESOURCE(IDI_SPLASH), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    

CMakeLists.txt:

project(number1)
set (R_DIR "/res")
set(CMAKE_MFC_FLAG 1)
add_executable(main WIN32 src/main.cpp res/r.rc)
set_target_properties(main PROPERTIES RESOURCE /res/splash.bmp)

res.rc:

IDI_SPLASH  BITMAP  "sample.bmp"

在 Visual Studio 资源查看器中打开 bmp 文件,但以双配额 ("IDI_SPLASH") 命名。

附:抱歉,但英语不是我的母语

【问题讨论】:

  • IDI_SPLASH 标识符不会神奇地出现。您将不得不自己定义它(例如#define IDI_SPLASH 42)。这通常在源代码和资源脚本都包含的头文件中完成。
  • / 开始一条路径似乎很奇怪。通常这意味着您指定从文件系统根目录开始的绝对路径,在这种情况下类似于C:/res/splash.bmp;还没有与RESOURCE 合作过,所以我不能告诉你,这个属性是否有任何不同。
  • @fab “通常这意味着......” - 我不知道,你会将什么归为“通常*,但在 Windows 上,/ 不会”没有任何意义。“文件系统根目录” - 在 Windows 上,这甚至意味着什么?这个问题是关于 CMake、Windows 资源脚本以及 Microsoft 的编译器和链接器。我怀疑你提供的任何东西都有对这些工具有任何影响。
  • @IInspectable 非常感谢!非常感谢您的帮助!

标签: c++ visual-studio winapi cmake resources


【解决方案1】:

根据 IInspectable 的回答,我添加了 resource.h:

#define IDI_SPLASH 101 //or other number id. 

我已将这个头文件包含在源文件 (.cpp) 和 resource.rc 中。资源文件中的include命令与源文件相同:

#include "resource.h"
IDI_SPLASH  BITMAP  "sample.bmp"

它有效:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 2014-11-19
    • 1970-01-01
    • 2017-03-10
    相关资源
    最近更新 更多