Вобщем судь проблемы: у меня есть файл exe/dll в нем есть ресурс типа Dialog, я его экспортировал в файл (именно один диалог, не в rc и не в res а прото в файл например 1.123), предварительно исправил его (например в названии дописал цифру - чтобы были отличия ), пробую заменить вот этим способом:
Код | function AddResource(FileName, ResName: string; Buf: pointer; Size: integer): integer; var Hnd: THandle; begin Hnd := BeginUpdateResource(PChar(FileName), false); if Hnd=0 then begin result := GetLastError; Exit; end; if UpdateResource(Hnd, RT_DIALOG, PChar(ResName), 1049, Buf, Size) then result := 0 else result := GetLastError; EndUpdateResource(Hnd, (result<>0)); end;
function AddFileToExe(ExeName, FileName, ResName: string): boolean; var fs: TFileStream; b: pointer; begin try fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); GetMem(b, fs.Size); fs.Read(b^, fs.Size); result := AddResource(ExeName, ResName, b, fs.Size)=0; fs.Free; FreeMem(b); except result := false; end; end;
procedure TForm1.Button1Click(Sender: TObject); {* Пример использования.} begin if AddFileToExe('C:\1.exe','C:\1.123', '1234') then ShowMessage('Готово') else ShowMessage('Не получилось'); end; |
в итоге получаю в разделе диалогов, при просмотре любыми программами для работы с ресурсами, ДВА одинаковых ресурса с именами '1234' причём с одинаковым языком 1049 (аналогично все остальны языки), пробовал использоваль модуль Alex'а, получаются два раздела Dialog опять же с одинаковыми ресурсами ( чего по идее быть не может), так же пробовал использовать функцию UpdateResourceW (работает аналогично модулю Алекса, результ такой же).. удалять ресурсы получается опять же ТОЛЬКО свои т.е. тот который был создан мной удаляется, а тот который уже был в exe остаётся всегда.. ехешник нормальный др прогами ресурсы меняются и удаляются, так вот вопрос как же всё таки сменить/удалить ресурс на Delphi?
ps/ ещё почемуто размер файла не меняется при добавлении моих ресурсов, если что не понятно спрашивайте) |