2013-02-16 72 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