Мінімальний додаток у Delphi - Статті Delphi - Delphi - Каталог статей - 1С guru сайт про

Мінімальний додаток у Delphi

Для всіх давно вже не секрет що використання VCL значно збільшує розмір файлу створеного в Delphi. Але далеко не всі знають як позбутися цих благ з метою зменшення розміру виконуваного файлу. І навіть не всі ті хто знають як це зробити, зможуть написати програму розміром524 байта! Власне, така програма і є метою цієї статті:)

Отже, почнемо! Інструменти: Delphi (перевірялося на 7 версії), Restorator, migeel's Realigner, fakecom.com та UPX.

Що і для чого потрібно по порядку:Delphi- буде середовищем для написання нашого "монстра"! (власне нічого крім DCC32.EXE нам від неї не потрібно :)Restorator- компілятор Delphi має гарну звичку - писати в секцію "RCData" ресурсу EXE файлу debug інформацію про всі модулі, що використовуються в програмі. А ось за допомогою цієї утиліти ми зможемо позбутися цієї секції!migeel's Realigner– утилітка, що дозволяє зменшити розмір EXE файлу, шляхом видалення таблиці релокацій, яка (у разі програм на Delphi) є абсолютно невикористовуваним баластом і може бути абсолютно безболісно видалена. Але іноді аналогічна програма StripReloc дає найкращі результати.fakecom.com- а ось цей "маніяк" розміром 60 байт, переконвертує наш EXE в com файл! Навіщо? Так за тим що у com файлів немає Win32/PE секції заголовка, як і самого заголовка взагалі :)UPX- програма стискає виконувані файли. У нашому випадку це буде отримано за допомогою fakecom.com COM файл.

Але навіть якщо використовувати всі ці утиліти, розмір EXE не зменшиться нижче 3 кб. У чому може бути проблема? Відповідь на це питання очевидна – у самій Delphi :)

Отже, маємосистемні бібліотеки з різними смаколиками, від яких ми готові відмовитися заради програми в кілька сотень байт. Ну що ж, сокира нам у руки:

"System.pas""SysInit.pas"Ось воно! Відбулося, ми свідомо відмовилися від усіх благ Delphi! Але тепер потрібно змусити Delphi компілятор брати саме наші системні заголовки. Для цього їх необхідно скомпілювати в бібліотеці dcu. Створюємо папку, в неї кидаємо наші pas заголовки і DCC32.EXE який можна взяти тут “C: Program Files Borland Delphi7Bin”. У папку також кидаємо всі утиліти які нам знадобляться (UPX, Realigner, fakecom.com) і створюємо Project1.dpr з таким кодом: Тепер у цій папці необхідно створити файлmake.batнаступного змісту: Даний BAT файл допоможе скомпілювати програму. Ну, чого ж ми чекаємо? Запускай! В результаті з'явиться наш довгоочікуваний EXE'шник! Дивимося на його розмір ... 3584 байт. Це вже добре, але на початку статті я обіцяв програму в 524 байти! :)

За допомогою програми Restorator 2004 видалимо не потрібний нам ресурс зі страшним ім'ям “RCData”. Дивимося на розмір EXE ... 3072 байт! Наступні наші дії раджу автоматизувати шляхом створення файликаmake_min.bat: Перший рядок "покоцает" таблицю рівняння EXE файлу, другий перетворює його в COM, а третій стисне. Отже! 3…2…1…ЖМИ. Не пройде і секунди, як у папці з'явиться Project1.com, розмір якого дорівнює 524 байти. (У різних версіях Delphi результат може змінюватися) Програма звичайно ж нічого не робить, але навіть це розсіює сумніви багатьох програмістів з приводу громіздкості програм написаних на Delphi;)

Насамкінець хотів би розповісти, що Вас чекає при написанні подібних програм: НЕМАЄ менеджера пам'яті, процедур для роботи з рядками та динамічнимимасивами, внаслідок чого робота з ними проводитиметься з використанням процедур і функцій Win API, але це ж Вас не зупинить? ;)