2011-07-17 51 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的文本来找出你正在使用的语言。,