IPB

Добро пожаловать, гость ( Вход | Регистрация )

> Замена системных модулей для Delphi, Уменьшим размер WinAPI приложений на 9-11 кб.
Grom PE
Nov 7 2007, 01:15
Сообщение #1


Advanced Member
***

Группа: CTPAX-X
Сообщений: 84
Регистрация: 7-February 08
Из: i@grompe.org.ru
Пользователь №: 3,120
Спасибо сказали: 95 раз(а)



Как говорится, писал для себя, но думаю, пригодится и другим.

grompe.org.ru/files/delphisys.rar — Устарело, см. ниже

Если у вас чистый проект на Delphi, в котором используется только WinAPI, и по минимуму всяких встроенных функций языка, то большой шанс, что программу можно сократить примерно на 10 кб, используя эту замену системных модулей.


Пропатченный компилятор от Delphi 7 — DCC32HACK, нацеленный на минимальный размер WinAPI программ,
а также обновленная замена системных модулей внутри.

http://grompe.org.ru/files/dcc7hack.rar
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
May 3 2010, 10:08
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,355
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 311 раз(а)



Вопрос - чем можно воспользоваться в Delphi для увеличения длины строки до нужного размера?
Если писать так:
CODE
SetLength(S, Len);

То при использовании DCC32HACK в готовый код пихается куча всякого барохла, в частности строчка имени программы указанная в:
CODE
Program PrgName;

Т.е. в исполняемый файл зачем-то пихается строчка "PRGNAME", если не писать "Program...", то на месте "PRGNAME" будет слово "PROGRAM". Зачем это делается - знают только в фирме Borland.
Если использовать:
CODE
S:=#32;
While Length(S) < Len Do S:=S + S[1];

То это долго. Можно конечно и так:
CODE
S:=#32;
While Length(S) < Len Do S:=S + S;
S:=Copy(S, 1, Len);

Но при большом Len это будет занимать в два раза больше чем надо памяти на финальном шаге - как следствие жуткие тормоза при реаллоцировании.
Есть какие-нибудь ещё способы удобные? Для тех случаев, когда нужна именно строка - когда нужен просто буфер, то там и GetMem()'ом обойтись можно...

Или тогда вопрос к Grom PE ты можешь в DCC32HACK как-нибудь перехватить работу с SetLength()?..


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 29th April 2024 - 02:13