Program MiniSize;
uses
Windows;
{$R *.RES}
var
nSize: Integer;
hFile: THandle;
strSize: String;
begin
// открыть текущий файл и прочитать размер
hFile := CreateFile (PChar (ParamStr(0)),
0, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
nSize := GetFileSize (hFile, nil);
CloseHandle (hFile);
// скопировать размер в строку и отобразить ее
SetLength (strSize, 20);
Str (nSize, strSize);
MessageBox (0, PChar (strSize),
'Mini Program', MB_OK);
end.
Программа определяет имя своего собственного исполняемого файла (для этого используется значение первого параметра командной строки ParamStr (0)), открывает этот файл, определяет его размер, преобразует полученное численное значение в строку (при помощи простой функции Str) и отображает результат в виде сообщения. Программа не обладает какими-либо окнами верхнего уровня. Более того, для преобразования целого числа в строку я использую функцию Str для того, чтобы не включать в программу модуль SysUtils, в котором содержатся более сложные функции форматирования и при использовании которого размер результирующего исполняемого файла увеличится. Откомпилировав программу в среде Delphi 5, вы получите исполняемый файл размером 18 432 байта. При использовании Delphi 6 размер исполняемого файла уменьшится до 15 360 — это меньше на целых 3 Кбайт. Заменив длинную строку на короткую строку и несколько модифицировав код, вы можете сделать программу еще меньше — размер исполняемого файла достигнет 9216 байт. Такое возможно благодаря тому, что вы отказываетесь от использования подпрограмм поддержки работы со строками и механизма выделения памяти — этого можно достичь только в программах, которые обращаются к вызовам самого низкого уровня. Обе версии программы можно обнаружить в исходном коде рассматриваемого примера на прилагаемом компакт-диске. Обратите, однако, внимание на то, что все подобного рода решения обладают своими недостатками. В частности, чтобы сократить размер приложений, в которых не используются вариантные переменные, инженеры Borland были вынуждены несколько увеличить размер приложений, в которых такие переменные используются. Преимуществом этого явилось сокращение объема памяти, необходимой для работы приложений, не использующих варианты: если вы не используете вариантные переменные, ваше приложение не будет загружать многомегабайтные системные библиотеки Ole2. На мой взгляд, в этой связи важным является то обстоятельство, что теперь полноценное приложение Delphi, основанное на использовании пакетов времени исполнения, обладает воистину маленьким размером. Обратите внимание на ничего не делающую программу MimiPack, размер исполняемого файла которой составляет 15 972 Кбайт.