Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание компилятора в Delphi 
:(
    Опции темы
Alexeis
Дата 10.9.2006, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



в папке bin delphi есть консольная прога brcc32.exe  (она маленькая очень)
В командной строке надо указать имя rc файла описывающего ресурс (обычно там название секции  пробел название ресурса пробел путь к ресурсу на диске). И еще необязательные дополнительные параметры типа название выходного файла *.res и путь к нему. Все это можно узнать запустив в CMD 
стоку brcc32.exe (она раскажет обо всех параметрах). Этот компилятор ресурсов придется за собой таскать.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
blablabla
Дата 12.9.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Цитата(alexeis1 @ 8.9.2006,  23:11)
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function AddResource(FileName, ResName: string; Buf: pointer; Size: integer): integer;    
{* Добавляет данные в RC_DATA. На входе:    
   FileName - имя файла с ресурсами (exe, dll и т.п),    
   ResName  - имя ресурса (ОБЯЗАТЕЛЬНО! заглавными латинскими буквами),    
   Buf      - указатель на блок данных, Size - размер блока данных.    
   На выходе - 0, если все Ok, либо номер ошибки Windows }    
var    
  Hnd: THandle;    
begin    
  Hnd := BeginUpdateResource(PChar(FileName), false);    
  if Hnd=0 then begin    
    result := GetLastError; Exit;    
  end;    
  if UpdateResource(Hnd, RT_RCDATA, PChar(ResName), 1049, Buf, Size) then    
    result := 0    
  else result := GetLastError;    
  EndUpdateResource(Hnd, (result<>0));    
end;

function AddFileToExe(ExeName, FileName, ResName: string): boolean;    
{* Добавляет любой файл в ресурсы. На входе:    
   ExeName  - Путь к файлу с ресурсами,    
   FileName - Путь к файлу, который запихнуть в ресурсы,    
   ResName  - Под каким именем сохранить в ресурсах. ОБЯЗАТЕЛЬНО! заглавные латинские }    
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:\2.exe', 'NEWEXERES') then    
    ShowMessage('Готово')    
  else ShowMessage('Не получилось');    
end;

end.

alexeis1, код который ты привёл не срабатывает. Ты его сам пробывал?
PM MAIL   Вверх
Alexeis
Дата 12.9.2006, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



blablabla, странно у меня все отлично сработало... 
Просто это пример как exe поместь в раздел RCDATA, а не картинку в раздел BITMAP

Я уже подзабыл как работает этот примерчик, оказывается и res файл компилровать даже не надо. Просто указать имя файла и ресурса.

Для тех кому сильно лень разбиратся в коде привожу уже совсем готовый пример с исходниками. Где програмка test.exe выдает ошибку о том что ресурс не найден, а когда запускается patch.exe и внедряет в него картинку jpeg, то при повторном запуске все уже срабатывает и картинка появляется на форме.
Файл "копия test.exe" - резервная копия test.exe, добавил так как после патча уже не остается оригинала (test.exe).

http://alexei-s1.narod.ru/Samples/10.7z

Это сообщение отредактировал(а) alexeis1 - 12.9.2006, 12:28


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
blablabla
Дата 12.9.2006, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 7.9.2006

Репутация: нет
Всего: нет



Спасибо...  smile 
PM MAIL   Вверх
alex4012
Дата 26.7.2012, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 26.7.2012

Репутация: нет
Всего: нет



Сначала сильно огорчился потому что код не заработал (а это как раз то что нужно(( уже недели 3 ищу), а потом удивился) код работоспособен на exe-шниках delphi 7 но когда компилируешь под delphi XE2 то выходной exe просто коцается(( и не запускается) 

Подскажите как решить проблему?
PM MAIL   Вверх
Alexeis
Дата 26.7.2012, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



 Код работоспособен и на XE2 сейчас перекомпилировал оба экзешника и все работает также как и на семерке. Основную работу делает функция UpdateResource(Hnd, RT_RCDATA, PChar(ResName), 1049, Buf, Size) . Это WinApi функция, очень маловероятно, чтобы она что-то портила. Это никакой не хак, а вполне документированная функция. Нужно посмотреть под отладкой коды ошибок которые возникают.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
stuq1
Дата 4.8.2012, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.1.2012

Репутация: нет
Всего: нет



У меня такая же проблема, но потихоньку начинает получаться - я создаю свободно распространяемую среду программирования. Планирую там сделать возможность создавать программы на нескольких языках программирования.

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0957 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.