2011-04-27 47 views
1

我有這樣FindResource失敗

IDB_PNG1    PNG      "images\\list-back.png" 
    HRSRC hrsrc = FindResource(module, MAKEINTRESOURCE(IDB_PNG1), TEXT("PNG")); 

這工作得很好,
但我不能使它工作的任何變體下方

hrsrc = ::FindResource(module, L"images\\list-back.png", L"PNG"); 
    hrsrc = ::FindResource(module, L"images\\list-back", L"PNG"); 
    hrsrc = ::FindResource(module, L"list-back.png", L"PNG"); 
    hrsrc = ::FindResource(module, L"list-back", L"PNG"); 

GetLastError返回0x00000716指定的一段代碼資源名稱不能在圖像文件中找到。
什麼是正確的字符串格式/用字符串搜索的方式?

編輯:.rc將被生成幷包含.html和.png文件。我希望能夠找到並加載該文件,而無需重新編譯該exe文件。我需要能夠識別.html什麼.png使用,在EXE我會收到該路徑/ ID比FindResource和加載。這可以做到嗎?

+0

剛剛有類似的問題 - 試圖找到與MAKEINTRESOURCE(ID)的資源並且這不起作用,但是當更改爲FindResource(TEXT(「ID」),..)奇蹟般地工作。 類似於@EFraim建議的 – estoy 2017-01-13 17:16:56

回答

3

RCDATA行中的第一個條目是名稱(或ID)。最後一項只是「資源編譯器應該使用什麼來創建這個條目」 - 名稱不存儲在可執行文件中。

FOO RCDATA "images\\list-back.png" 

... 

::FindResource(module, L"FOO", RT_RCDATA); 
+0

不起作用,無論如何對我無用,因爲我無法獲得IDB_PNG1字符串或int。我在資源的回調中收到images \\ list-back.png – cprogrammer 2011-04-27 16:51:56

+0

@cprogrammer:使用RCDATA並且它工作正常。用於創建資源的文件名不存儲在資源表中 - 名稱/標識符是。 – Erik 2011-04-27 17:02:55

+1

我仍然必須使用MAKEINTRESOURCE(FOO),不適用於「FOO」。至少如果資源是在一個DLL中,並且該調用在EXE中。我用PEExplorer查看了一下,你說得對,路徑沒有存儲在資源表中 - 是一種死路,但我需要找到一種方法來鏈接.rc(將生成rc中的資源)我可以從exe中「查找」該資源(無需重新編譯exe)。 – cprogrammer 2011-04-27 17:34:35

0

此外,您可以將資源存儲與字符串ID,而不是一個數字ID,像這樣:

list-back PNG "images\\list-back.png"

那麼你的確可以這樣做:

hrsrc = ::FindResource(module, L"list-back", L"PNG");

這比Erik提供的解決方案效率低,但如果您嘗試訪問某些內容,可以更易於管理資源來自說,靜態庫,而資源本身在後期嵌入到DLL/EXE中。 (你不必知道數字ID,只需在你的模塊中同意符號名稱)