2011-07-17 85 views
0

我想通過代碼刪除資源位圖,並且在執行操作時遇到問題。經歷了幾個小時的與谷歌頭撞。這裏是代碼:在Visual C++中刪除位圖資源

int result; 
HANDLE h; 
h = BeginUpdateResource(L"C:\\Users\\Steve\\Desktop\\stub.exe", FALSE); 
result = UpdateResource(h, RT_BITMAP, MAKEINTRESOURCE(IDB_BITMAP2), MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), NULL, 0); 
EndUpdateResource(h, FALSE); 

當我調試時,變量「結果」結束爲NULL,這意味着更新沒有通過。我錯過了一些令人難以置信的基礎嗎?

+0

在那裏,砰的一聲......它不好玩:( – Mehrdad

+0

只是爲了偏執,有你檢查了'BeginUpdateResource'的返回值嗎?'GetLastError'在'UpdateResource'後面說了什麼? –

+1

愚蠢的問題,但是「stub.exe」沒有運行或者正在使用嗎?你的資源更新代碼正在另一個應用程序中運行 - stub.exe並沒有試圖更新自己,是嗎? – selbie

回答

0

好吧,我想清楚出了什麼問題。首先,我使用「GetLastError()」命令來幫助減少可能性。它給了我一個錯誤0x57,這意味着ERROR_INVALID_PARAMETER。

當我進一步嘗試時,似乎在語言參數中,我列出了「MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL)」而不是「MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US)」。顯然,資源關心你正在使用的語言,即使它是一個不使用語言的位圖。

一旦我放入LANG_ENGLISH參數,它就起作用了。你可以通過檢查資源正在使用的.rc的文本來找出你正在使用的語言。,