2013-02-16 75 views
2

我一直在尝试这样的过去3天,我仍然无法使它工作。 WINAPI FindResource函数抛出错误1813:这意味着找不到资源类型。我使用的是Eclipse,所以没有.RC文件或resource.h文件,所以我已经加载我的exe文件LoadLibraryA,然后在FindResourceA中使用HANDLE。这里是我的代码:现在FindResource在exe文件上给出了错误1813

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,但没有任何作用,它仍然给我与以前相同的错误。网络上的所有解决方案都与.RCresource.h文件Visual Studio,是否有任何东西与日食?谢谢

回答

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提供的林资源编辑器是不是avaible这个免费工具可能会有所帮助: http://www.resedit.net/我曾经使用它,并为我的需求工作。总之,我不知道它的现状。

+0

嘿感谢它的工作原理.. – 2013-02-17 07:33:33

+0

@KeshavNair:您也可能想看看在我的更新中提到的工具。 – alk 2013-02-17 08:05:13

2

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

10 EXE "somefile" 

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

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

但问题是,你得到,因为你没有做任何创建该类型的资源错误“未找到资源类型”。你期望什么?

+0

对不起,但我想知道,如果有另一种方式来添加资源或使其工作,我认为是的,我不能在eclipse中添加.RC文件 – 2013-02-16 16:17:12

+2

@KeshavNair但这不是你问的问题。你问:“为什么FindResource找不到我的资源?”答案是“因为你从来没有添加资源,所以没有什么可以找到的。”如果您的问题实际上是“如何在eclipse中添加资源?”那么你应该问这个问题。 – 2013-02-16 16:35:01