如何在以下代碼中修改buffer
然後保存可執行文件資源中的更改?我正在尋找類似SetString(handle,index,buffer,size)
的東西。修改exe文件資源中的字符串
var
hExe : Cardinal;
buffer : array [0..4097] of ansichar;
begin
hExe:=LoadLibraryEx(PAnsiChar(Edit2.Text),0,LOAD_LIBRARY_AS_DATAFILE);
LoadString(hExe,65300,buffer,SizeOf(buffer));
ShowMessage(buffer);
//need to modify buffer here then I'll unload the resources..
end;
更新:這是我在UpdateResource
var
hEXE: DWORD;
pData: PAnsiChar;
begin
pData := PAnsiChar(Edit1.Text);
hEXE := BeginUpdateResource(pchar(edit2.text), FALSE);
if hEXE <> 0 then
begin
UpdateResource(hEXE, RT_string, MAKEINTRESOURCE(4082), LANG_NEUTRAL,
@pData, Length(pData)); //if i change 4082 to 65300 it creates another key like 4082
EndUpdateResource(hEXE, FALSE);
end;
嘗試此代碼打亂了整個4082的內容。問題是RT_STRING中名爲4082的項目是一組字符串。當我打開一個資源編輯器中的exe文件,單擊字符串表,然後4082的結果是:
STRINGTABLE
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
{
65296, "Unicode"
65297, "Big Endian Unicode"
65298, "UTF-8"
65299, "UTF-7"
65300, "ABCDE12345"
}
所以我要麼需要解析字符串組或者我需要一個API來設置修改字符串中的索引65300組。有任何想法嗎?
一個評論聲望太低的用戶發佈了一個回答,說「結果:= AArray [APos] + AArray [APos + 1] * 16;'應該是結果:= AArray [APos] + AArray [APos + 1 ] * 16;'。我不知道這是否正確;只是把它放在那裏給你看。 – 2013-06-05 15:39:01