【发布时间】:2012-12-14 19:31:39
【问题描述】:
我在这里问了这个问题 - updating STRING TABLE via UpdateResource (adding multiple strings)
现在我再问一次,因为这一次我可以为问题添加更多细节。
过去一天我一直在尝试此操作,但无济于事。 我想要的结果是这样的(我在 MSVS 中手动添加了字符串): 如您所见,多个条目,并且它是“干净的”并且可以由程序轻松访问!
现在,我的消息来源:
wstring buffer[5] = {L" Meow",L" I",L" Am",L" A",L" Dinosaur"}; // ignore the string
if (HANDLE hRes = BeginUpdateResource("Output.exe",TRUE))
{
for (int i = 0; i < 5; i++)
{
wchar_t * temp;
temp = new wchar_t[(buffer[i].length()+1)];
wcscpy(temp,buffer[i].c_str());
wcout << temp << endl;
UpdateResource(hRes,RT_STRING,MAKEINTRESOURCE(1),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
temp, 48); //buffer[i].length()+1
delete[] temp;
}
EndUpdateResource(hRes,FALSE);
}
产生:
这是错误的,因为它似乎只将最后一个字符串添加到表中,而不是之前的字符串!
当我尝试修改源时,MAKEINTRESOURCE(1) 现在是“MAKEINTRESOURCE(i)”,结果如下图所示:
成功在于它添加了所有字符串,但它似乎创建了各种字符串表,这不是我们想要的。虽然我确实注意到每张图片中的 ID 增加了 16,这可能可以解释一些事情。基本上,我希望将字符串格式化为第一张图片中的格式(使用多个字符串),但不知道如何执行此操作。
感谢您的帮助。
【问题讨论】:
-
如何建立字符串表?有结构要填写吗?我已经查看并尝试过 StringTable 和 StringFileInfo 但无济于事。
标签: c++ c windows winapi resources