library stub;
function SumInts(A, B: integer): Integer; stdcall;
begin
SumInts:=A + B
end;
exports
SumInts;
begin
end.
размер dll
Вообщем написал dll в uses только windows.pas. Содержит всего одну процедуру, а размер на выходе 17 KB. Подскажите можно ли как нибудь уменьшить размер. Пакеры не предлагать. Заранее спасибо.
Магия данного типа дается только тем, кто занимается спортом (ее улучшением).
Для начала врубается Project Options - Linker - Map file - Publics. Вдумчиво курится дока до нирваны полного понимания происходящего. Потом ищется волшебная мана на сайте KOL. Понимание масштаба задачи происходит с одновременным принятием n-ного числа литров пива. Затем начинается обряд посвещения в Маги Оптимизации. Только самые стойкие доходят до конца...
Ну тогда бы написал собственный экспорт из kernel'а или чего у тебя прога использует.
Ещё бы неплохо отрубить директиву {$APPTYPE CONSOLE}.
Но всё равно испльзуя делфи ты врядли получишь экзешник меньше 16К - runtime-библиотеки паскаля (ReadLn, WriteLn и иже сними) по прежнему будут включаться в код.
Однако, размер библы уменьшил до 11,5 KB. А насчет экзе так размер можно умудриться уменьшить и до 1KB - естесственно что прога будет небольшая.
Да это и не нужно. Тебе ведь не demo-сцены делать на ней.
Если ты пишешь на WinApi, то лучше напиши на VC++(визуально разницы не будет), а в настройках линковщика укажи Use MFC in a Shared DLL.
А на Делфи LoadLibrary(), ведь Windows.dcu включает в себя kernel32,User32,GUI... Лоадь что тебе нужно напрямую.
А я Delphi люблю. К тому же отказался от windows.pas и в uses'ах нет ничего, а размер все равно 11,5KB.
Для начала убери {$R *.res}, если есть. Правда, иконка приложения гикнется.
Код библиотеки:
Код:
настройки компилера - отрубил отладочную инфу. оптимизация стоит.
размер stub.dll составил 17.0 KB (17 408 bytes)
Код экзешника:
Код:
program stubprog;
{$APPTYPE CONSOLE}
function SumInts(A,B: integer): integer; stdcall;
external 'stub.dll';
var A,B: integer;
begin
ReadLn(A,B);
WriteLn(SumInts(A,B));
ReadLn;
end.
{$APPTYPE CONSOLE}
function SumInts(A,B: integer): integer; stdcall;
external 'stub.dll';
var A,B: integer;
begin
ReadLn(A,B);
WriteLn(SumInts(A,B));
ReadLn;
end.
Настройки компилера аналогичные, размер файла - 19.0 KB (19 456 bytes)
думаю, если использовать младшую версию dcc32, что-то около 10 или 11, то можно получить чуток меньше размеры, т.к. в то время system.pas и иже с ним были потоньше.
У меня же библа - какая там иконка.
hardcase
Вот поэтому я и просил dcc32 от Delphi 3.
Да и еще. В dll можно же формы включать и соответственно размер где-то порядка 300KB. У меня вопрос: можно ли использовать DialogBoxParam и вызывать готовый диалог из ресурсов? Так наверное библа меньше весить будет? И может кто-нибудь знает как это сделать, а то у меня, диалог не создается?
Посмотрел, конечно, но это я и так уже знаю - объяснили, а как насчет диалога из ресурсов.