Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Файловая система
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.12.2006, 11:07
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
Восклицание Замена ресурсов в Pe файле

Написал DLL на сях, которая позволяет программно заменять ресурсы в PE файлах.

Пример использования в Delphi:
Код:
type
  TReplaceResource = function(sSource,sDest,sType,sName: PChar): Boolean; stdcall;

...
  TMainForm = class(TForm)
...

procedure ReplRes();
var
  ReplaceResource:    TReplaceResource;

begin

  if not ReplaceResource(PChar('c:\resfile.dat'),PChar('c:\pefile.exe'),RT_RCDATA,'DATA') then
  begin
    MessageBox(Handle,'Internal Error!',Caption,MB_ICONERROR);
  end;

end;

Пример писал по памяти, могут быть ошибки.
Описание самой функции:

TReplaceResource = function(sSource,sDest,sType,sName: PChar): Boolean; stdcall;

sSource - любой файл,
sDest - любой PE файл (exe,dll,ocx, и т.д.)
sType - тип ресурсов (RT_RCDATA, RT_BITMAP, RT_STRING и т.д.)
sName - имя,под которым будет сохранен ресурс

По-идее, процедура должна ЗАМЕНЯТЬ УЖЕ СУЩЕСТВУЮЩИЙ ресурс на новый, но я не пробовал использовать ее для добавления нового, может
быть,тоже будет работать.

Возвращает буленовое значение, как индикатор ошибок (если были ошибки - вернет false, если все прошло успешно - вернет true)

Также, для программного редактирования ресурсов, можно использовать
API методы (их описание смотрите в SDK или в дельфовом хэлпе):

BeginUpdateResource
UpdateResource
EndUpdateResource

Почему я написал DLL на сях с использованием этих API, а не стал использовать АПИ через Делфи? Да потому, что я пробовал через Делфи, но код упрямо отказывался работать, если у кого получится на Делфи реализовать замену\добавление\редактирование ресурсов - буду очень рад этому.
Исходники и сама DLL в аттаче.
Вложения
Тип файла: zip ResDll.zip (17.0 Кбайт, 66 просмотров)
Тип файла: zip ResDll_SOURCE.zip (7.8 Кбайт, 79 просмотров)
__________________
THE CRACKER IS OUT THERE
Ответить с цитированием
Этот пользователь сказал Спасибо 4kusNick за это полезное сообщение:
kms (07.06.2018)
  #2  
Старый 12.12.2006, 07:02
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ну и чем это круче "ресторатора"?
Ответить с цитированием
  #3  
Старый 12.12.2006, 11:47
Аватар для 4kusNick
4kusNick 4kusNick вне форума
Местный
 
Регистрация: 06.09.2006
Адрес: Россия, Санкт-Петербург
Сообщения: 444
Репутация: 550
По умолчанию

А что, ты используешь ресторатор, когда пишешь, например, сетап и тебе нужно заменять ресурсы в каком-нибудь файле, распакованном из него во время установки?

Простой пример:
Есть определенный каркас сетапа, сделан одним файлом, все данные об именах файлов, запакованных в нем, сами данные в сжатом формате, мультиязычные строки и т.д. содержатся в его ресурсах, т.е., получается универсальный каркас.
Ну и существует админка какая-то, которая эти каркасы собирает в полноценные сетапы, т.е. в этой админке мы полностью настраиваем каркас, какие файлы будут в нем лежать, какие строки в нем будут, какого цвета та или иная хрень будет и т.д. И как же ты это реализуешь, если нужно, чтобы каркас оставался единым файлом? Я не вижу более рационального подхода, кроме как хранить все эти данные в ресурсах.

А руками, всякими там рестораторами не пособираешь - во-первых долго (когда надо собрать там 20-30 сетапов сразными параметрами), во-вторых, файлы в сетапе сжимаются и расжимаются по особому алго, а ресторатор ничего с этим не сделает, надо тогда будет писать прогу, которая бы сжимала и склеивала файлы в один по тому алго, и уже потом этот файл пришлось бы руками каждый раз запихивать в ресурсы каркаса, к тому же, пришлось бы еще писать прогу, которая создавала бы список файлов, которые были склеены в один, и этот список тоже пришлось бы пихать в сетап руками через ресторатор там или еще какой-нить редактор ресурсов.

Да и во время установки сам сетап может менять ресурсы в устанавливаемых файлах, все это тоже задается в админке - в каком файле какой ресурс на какой файл менять и т.д.


И вообще, я написал это не для того, чтобы меряться крутостью с чем-либо или с кем-либо, а чтобы программер мог работать с ресурсами сам из собственной программы, из собственного кода, без использования каких-нибудь левых тулз.
Может, кому и полезно будет...
__________________
THE CRACKER IS OUT THERE

Последний раз редактировалось 4kusNick, 12.12.2006 в 11:51.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:41.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter