day & night

Компиляция, В Дельфи
Дата обновления: , перейти к новому сообщению
#1
The Godfather



Специалист
Group Icon

Группа: Наши Люди
Сообщений: 369
Регистрация: 5.09.2006
Из: Н. Новгород
Пользователь №: 222.242


Респектов: 53
-----X----




Как можно уменьшить размер выходного exe файла?
У мя прога, в которой которой 3 строчки кода (Написанного), занимает 300 Кб. А если екзешничек сжать прогой-компрессором, то будет 150. Реально ли уменьшить размер до 20-30 Кб?
ЗЫ, А как сделать, чтобы формы вообще небыло? Тоись не скрытая, а вообще не было?
User is offline
Go topGo end

Ответов(10 - 11)
10.07.2007 - 22:42
#11
The Godfather



Специалист
Group Icon

Группа: Наши Люди
Сообщений: 369
Регистрация: 5.09.2006
Из: Н. Новгород
Пользователь №: 222.242


Респектов: 53
-----X----




А где???
Там есть Ашдуб Entrypoint, File Offset, Linker Info, EP Section, First Bytes, Subsystem. На язык написания проги ни одно не похоже!
User is offline
Go topGo end
27.07.2007 - 17:02
#12
Azetot



Unregistered














Для того чтобы создать маленькую программу в Delphi, нужно создать но-
вый проект (по умолчанию Delphi при открытии сама создаст новый файл
проекта, но вы всегда можете создать новое приложение, выбрав File\New\
Application), и зайти в менеджер проектов (меню View\Project Manager).
Здесь нужно удалить все модули и формы (пункт Unit)
чтобы остался только файл самого проекта (по умолчанию его имя
Projectl.exe). Никаких модулей в проекте не должно быть.

Теперь нужно щелкнуть правой кнопкой мыши на имени проекта и выбрать
из появившегося контекстного меню пункт View Source или в главном меню
Project выбрать пункт View Source. В редакторе кода откроется файл проекта
Projectl.dpr. Если вы уже удалили все модули, то его содержимое должно
быть таким:

program Project1;
uses
Forms;
($R *.res}
begin
Application.Initialize;
Application-Run;
end.

Теперь можно скомпилировать абсолютно пустой проект. Для этого надо
выбрать в меню Project пункт Compile Project или нажать сочетание клавиш
+. После компиляции выберите в меню Project команду
Information for Projectl. Появится окно с информацией о проекте.
В правой части окна должны быть описаны используемые пакеты. Так как
вы все удалили, значит, там должна красоваться надпись None. А вот с ле-
вой стороны должна быть описана информация о скомпилированном коде.
Самая последняя строка показывает размер файла, и у меня он равен
370 688 байт. Ничего себе "пустая программа"!!! Мы же ничего еще не напи-
сали. Откуда же тогда такой большой код

Давайте разберемся, что осталось в нашем проекте, чтобы обрезать все то,
что еще не обрезано. Сразу обратите внимание, что в разделе uses подклю-
чен модуль Forms. Это объектный модуль, написанный "дядей Борландом",
а значит, его использовать нельзя, потому что именно он увеличивает раз-
мер нашей программы. Между командами begin и end используется объект
Application. Этот объект тоже использовать не надо, так как он не заботит-
ся о "фигуре" программы.
Большой объем, который появляется даже у пустой программы, как раз и
связан с объектом Application, который объявлен в модуле Forms. Хотя мы
использовали только два метода i n i t i a l i z e и Run, при компиляции в ехе-
файл попадает весь объект Triplication, а он состоит из сотен, а может и
тысяч строчек кода.
Чтобы избавиться от накладных расходов, нужно заменить модуль Forms на
windows, который описывает только WinAPI. Этот модуль связан с объекта-
ми Delphi, и его подключение является обязательным, иначе вы не сможете
вызвать ни одной функции из набора WinAPI. А между begin и end вообще
все можно удалить. В итоге самый минимальный (с учетом использования
модуля windows) код программы будет выглядеть так:

program Projectl;
uses Windows;
begin
end.

Снова откомпилируйте проект. Откройте окно информации и посмотрите
на размер получившегося файла. У меня получилось 8 192 байта

Заготовка минимальной программы с использованием WinAPI готова. Те-
перь вы можете смело добавлять свой код. Мне нужно только объяснить
вам, какие модули можно подключать к своему проекту в раздел uses. Тут
все очень просто и не займет много времени.
Если при установке Delphi вы не отключали копирование исходников биб-
лиотек, то перейдите в директорию, куда вы установили Delphi. Здесь
перейдите в папку Source, затем в Rtl и, наконец, Win. Если вы отключили
копирование исходников, то вставьте компакт-диск с Delphi и ищите эти
директории там. В них расположены исходники модулей, в которых описа-
ны все API-функции Windows. Именно эти модули вы должны подключать
к своим проектам, если хотите получить маленький код. Если вы подключи-
те что-то другое, то я уже не гарантирую минимум размера вашей програм-
мы (хотя есть и исключения).
Сразу же рассмотрим пример. Если вы хотите, чтобы в вашей программе
были возможности работы с сетью, то вам нужно подключить к проекту
библиотеку сокетов. Среди модулей WinAPI есть файл с именем winsock.pas.
Значит, вы должны в разделе uses написать winsock (расширение писать не
надо), и ваша программа сможет работать с сетью.
Пока что я описал минимальный проект, в который можно добавлять свой
код. Но код, который вы вставите, выполнится один раз, и программа вы-
грузится из памяти.

Для этого нужно использовать следующий
шаблон для своих программ:

program Projectl;
uses
var
Msg
Begin
Windows;
: TMsg;
//Сюда можно добавлять свой код
//Дальше идет код, который заставит программу висеть в
//памяти вечно и не будет сильно загружать систему
while GetMessagef Msg, HInstance, 0, 0) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;

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

надеюсь помог??..
Go topGo end

Topic Options
Сейчас: 14.05.2024 - 23:32
Мобильная версия | Lite версия