FindResource在exe文件上给出错误1813

时间:2013-02-16 10:06:46

标签: c++ c winapi embedded-resource

过去3天我一直在尝试这个,但我仍然无法使其发挥作用。 WINAPI FindResource函数抛出错误1813:这意味着找不到资源类型。我正在使用eclipse,因此没有.RC文件或resource.h文件,因此我使用LoadLibraryA加载了我的exe文件,然后使用HANDLE中的FindResourceA。这是我的代码:

HRSRC hRsrc;
HMODULE hExe;

/** Loading resource file in the program */
if (!(hExe = LoadLibraryA(TEXT(filename)))) {
    printf("Cannot load resource error: %lu \n", GetLastError());
    return 0;
}
printf("Resource file %s is loaded to the program \n", filename);

/** Finding resource */
if (!(hRsrc = FindResourceA(hExe, MAKEINTRESOURCE(10), "EXE"))) {
    printf("Cannot find resource error: %lu \n", GetLastError());
    return 0;
}
puts("Resource found");

现在,根据我的理解,MAKEINTRESOURCE(10)允许我们定义自定义资源。这是正确的还是我错了?在资源类型中,我尝试给出“EXE”“BIN”“Exehead”和RT_RCDATA,但没有任何作用,它仍然给我与以前相同的错误。网络上的所有解决方案都是.RC上的resource.hVisual Studio文件,有什么可以与eclipse一起使用吗?感谢

2 个答案:

答案 0 :(得分:2)

要从二进制文件加载特定资源,您需要知道资源的类型及其ID。

如果其中任何一个或两个都不知道,您可以使用EnumResourceTypes()和/或EnumResourceNames()功能查找。

有关如何使用EnumResourceTypes()的示例,请访问:http://msdn.microsoft.com/en-us/library/windows/desktop/ms648008%28v=vs.85%29.aspx#_win32_Creating_a_Resource_List


<强>更新

如果MS提供的资源编辑器无法使用,则免费工具可能有所帮助:http://www.resedit.net/我过去常常使用它并按照我的需要工作。无论如何,我不知道它目前的状态。

答案 1 :(得分:2)

错误是正确的。您的文件中没有"EXE"类型的资源。当你说你没有.RC档时,你自己这么说。资源在.RC文件中定义,如果没有,则没有资源。要添加资源ID为10的"EXE"类型的资源,您需要创建一个.RC文件,将其添加到项目中并说出

10 EXE "somefile"

其中“somefile”是一些文件,其内容要用作资源数据。

如果您的IDE不支持.RC个文件,那么您将无法通过IDE添加资源。您必须通过后处理步骤以其他方式添加它们。

但重点是您收到错误“找不到资源类型”,因为您没有做任何事情来创建该类型的资源。你有什么期望?