过去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.h
和Visual Studio
文件,有什么可以与eclipse一起使用吗?感谢
答案 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添加资源。您必须通过后处理步骤以其他方式添加它们。
但重点是您收到错误“找不到资源类型”,因为您没有做任何事情来创建该类型的资源。你有什么期望?