| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Создание компилятора в Delphi |
| Автор: blablabla 7.9.2006, 22:38 |
| Всем здрасте....... У меня такой вопросс. Можно ли в DELPHI создать собственный компилятор? Если да, то дайте пожалуста ссылочку где можно почитать об этом. Заранее спасибо. |
| Автор: Vit 7.9.2006, 22:46 |
| Можно, ибо сам Дельфи написан на Дельфи. Других компилляторов не встречал, хотя интерпретаторов как грязи.... |
| Автор: blablabla 7.9.2006, 22:50 | ||
Ясно. Но как это можно сделать. Есть хоть немного информации об этом? |
| Автор: Alexeis 7.9.2006, 22:58 |
| У меня есть две книги 1)простая (примеры на паскале) без сложной теории и пр. называется "Пишем компилятор.pdf" (1,5мб) 2)Теоретизрованая и более сложная и полная с примерами на делфи и С "Компиляторы. Принципы, технологии, инструменты.djvu"(5,5мб) Если нужно, то я выкладываю. p.s. тема скорее из раздела поиск литературы. |
| Автор: blablabla 7.9.2006, 22:59 | ||
| Ладно, наверное это глобальный вопросс. Дам конкретную задачу. К примеру мне нужна прога, в которой я бы мог выбрать рисунок, а затем нажать кнопку пуск. Далее создавался бы ris.exe при запуске которого в окне програмы ris отражался бы выбранный мной рисунок. Добавлено @ 23:01
Спасибо большое. |
| Автор: Alexeis 7.9.2006, 23:15 |
| blablabla, так для этого компилятор не нужен. Нужно просто иметь заготовку программы ris.exe и внедрять в нее новые ресурсы, а она сама будет уже определять что за ресурс у нее и соответствено грузить его. А можно использовать компилятор Delphi DCC32.EXE и компилятор ресурсов BRCC32.exe. Они оба консольные. Сначала запустить первый с командной строкой и получить ресурс, затем исходник на паскале скомпилировать при помощи DCC32.EXE с этим ресурсом и получить EXE. Добавлено @ 23:16 Первая книга уже закачалась http://alexei-s1.narod.ru/books/pishem_compilator.pdf |
| Автор: blablabla 8.9.2006, 10:20 |
| alexeis1, с идеей на счёт ресурсов я понял. Но мне нужен один файл ris.exe в котором уже в скомпилированном виде будет находится мой рисунок. |
| Автор: Alexeis 8.9.2006, 10:54 |
| Ну так ресурс же и хранится в скомпилированном виде внутри одного единственого экзешника, его можно туда внедрять не компилируя заново экзешник, например так как это делает restorator, либо перекомпилируя заново, но это только если увеличение размера продукта на пару мегабайт не существенно. Все это будет выглядеть как один ris.exe |
| Автор: blablabla 8.9.2006, 22:30 |
| alexeis1, спасибо огромное. Тогда я наверное не правельно понял про ресурсы. Теперь буду изучать работу с ресурсами. Есть ли у тебя что нибудь про это? |
| Автор: Alexeis 8.9.2006, 23:11 | ||
|
| Автор: blablabla 9.9.2006, 20:46 |
| alexeis1. Как добавлять ресурсы ясно, но как в самой программе их использовать??? |
| Автор: Voyager 10.9.2006, 00:29 |
| alexeis1 А вторую книгу закачаешь? |
| Автор: Alexeis 10.9.2006, 00:51 |
| Voyager, да я закачал сразу одновременно с первой, но поскольку тут оно получается уже не по теме я ссылку не оставил. Если кому надо то вот http://alexei-s1.narod.ru/books/kompil_princip_tehnolog.part1.rar http://alexei-s1.narod.ru/books/kompil_princip_tehnolog.part2.rar Нород запрещает закачку более 5Мб, потому архив разбил на две части. |
| Автор: Alexeis 10.9.2006, 01:12 | ||
blablabla, вот пример загрузки из ресурса, но только он здесь не внедренный из вне, а прилинкованый при компиляции, но разница только в стоке {$R bmp.res}, которая линкует ресурс при создании Exe.
пример целиком с ресурсом можно скачать отсюда http://alexei-s1.narod.ru/Samples/ResEx.rar |
| Автор: blablabla 10.9.2006, 02:23 |
| alexeis1. А как создать сам ресурс??? |
| Автор: Alexeis 10.9.2006, 02:42 |
| в папке bin delphi есть консольная прога brcc32.exe (она маленькая очень) В командной строке надо указать имя rc файла описывающего ресурс (обычно там название секции пробел название ресурса пробел путь к ресурсу на диске). И еще необязательные дополнительные параметры типа название выходного файла *.res и путь к нему. Все это можно узнать запустив в CMD стоку brcc32.exe (она раскажет обо всех параметрах). Этот компилятор ресурсов придется за собой таскать. |
| Автор: blablabla 12.9.2006, 10:49 | ||||
alexeis1, код который ты привёл не срабатывает. Ты его сам пробывал? |
| Автор: Alexeis 12.9.2006, 11:36 |
| blablabla, странно у меня все отлично сработало... Просто это пример как exe поместь в раздел RCDATA, а не картинку в раздел BITMAP Я уже подзабыл как работает этот примерчик, оказывается и res файл компилровать даже не надо. Просто указать имя файла и ресурса. Для тех кому сильно лень разбиратся в коде привожу уже совсем готовый пример с исходниками. Где програмка test.exe выдает ошибку о том что ресурс не найден, а когда запускается patch.exe и внедряет в него картинку jpeg, то при повторном запуске все уже срабатывает и картинка появляется на форме. Файл "копия test.exe" - резервная копия test.exe, добавил так как после патча уже не остается оригинала (test.exe). http://alexei-s1.narod.ru/Samples/10.7z |
| Автор: blablabla 12.9.2006, 14:35 |
| Спасибо... |
| Автор: alex4012 26.7.2012, 02:43 |
| Сначала сильно огорчился потому что код не заработал (а это как раз то что нужно(( уже недели 3 ищу), а потом удивился) код работоспособен на exe-шниках delphi 7 но когда компилируешь под delphi XE2 то выходной exe просто коцается(( и не запускается) Подскажите как решить проблему? |
| Автор: Alexeis 26.7.2012, 08:36 |
| Код работоспособен и на XE2 сейчас перекомпилировал оба экзешника и все работает также как и на семерке. Основную работу делает функция UpdateResource(Hnd, RT_RCDATA, PChar(ResName), 1049, Buf, Size) . Это WinApi функция, очень маловероятно, чтобы она что-то портила. Это никакой не хак, а вполне документированная функция. Нужно посмотреть под отладкой коды ошибок которые возникают. |
| Автор: stuq1 4.8.2012, 17:55 |
| У меня такая же проблема, но потихоньку начинает получаться - я создаю свободно распространяемую среду программирования. Планирую там сделать возможность создавать программы на нескольких языках программирования. |