如何使用 SDL_LoadBMP 编译的资源文件

Posted

技术标签:

【中文标题】如何使用 SDL_LoadBMP 编译的资源文件【英文标题】:How to use compiled resource file with SDL_LoadBMP 【发布时间】:2012-03-19 01:33:47 【问题描述】:

我必须在 Windows 7 中使用 NetBeans 7.1.1 for C++,并且我正在使用 SDL 编写应用程序。我可以让 SDL_LoadBMP 与外部文件一起正常工作,但我希望将我的资源作为 EXE 的一部分进行编译。

我发现您可以构建 RES 文件以链接到 EXE,因此我尝试通过添加以下内容来修改我的构建脚本:

.build-pre:
    windres player.res player.o

然后在项目的链接器设置中,我将 player.o 添加到库中。这编译得很好,但现在我不知道如何引用这个 .o 文件。我试过使用 FindResource() 和 LoadResource() ,他们总是给我NULL。我包含了一个具有#define PLAYER_IMAGE 1000 的头文件。代码如下所示:

HRSRC res = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(PLAYER_IMAGE), RT_BITMAP);

if(!res) 
    fprintf(stderr, "The resource couldn't be found.\n");


HGLOBAL res_handle = LoadResource(NULL, res);
if(!res_handle) 
    fprintf(stderr, "The resource couldn't be loaded.\n");


char* res_data = (char*)LockResource(res_handle);

我在正确的轨道上吗?如果是这样,我做错了什么?如果不是,我应该怎么做?

【问题讨论】:

你检查过MAKEINTRESOURCE(PLAYER_IMAGE)的返回值吗?它应该是表示资源名称的 LPTSTR。 MAKEINTRESOURCE(PLAYER_IMAGE) 返回 1000,这是我在标头中有 #define 的值。 【参考方案1】:

windres 用于将 .rc 文件编译成 .res 文件,然后您必须将 .res 和 .o 文件与 ld 链接在一起。无论如何,是的,你在正确的轨道上,你只需要使用 SDL_RWFromConstMem() 从资源中获取数据。

【讨论】:

以上是关于如何使用 SDL_LoadBMP 编译的资源文件的主要内容,如果未能解决你的问题,请参考以下文章

如何提取安卓apk文件中的图片资源?(resources.arsc中的)

android学习笔记40——国际化和资源自适应

工作分析有利于提高人资管理能力

如何将 Drawable 保存在资源文件夹中?

Gradle插件开发 APK瘦身资源自定义7z压缩

Android APK打包流程