如何使用 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 编译的资源文件的主要内容,如果未能解决你的问题,请参考以下文章