[ reiser @ 29.11.2003. 20:12 ] @
Mozda je pitanje malo dumb :
Kako moze da se smanji velicina kompajliranog source koda u delphi-ju ? Primetio sam da ako ne koristim uses, velicina cistog fajla je svega 9.0 Kb, ali ako koristim uses, onda je velicina cistog fajla oko 350 Kb. Moze li nekako da se iz tih unita (Messages, Dialogs, ShellApi, itd...) 'izvuce' samo ta funkcija/procedura koja mi treba i da je ubacim u moj source code ?
[ broker @ 29.11.2003. 21:39 ] @
U principu moze ali je komplikovano. Postoje neke gotove biblioteke koje sadrze zamene za VCL tako da se zaista mogu praviti aplikacije koje imaju vrlo malu izvrsnu datoteku. Nazalsot, ja sam se time bavio davno i ne secam se imena biblioteka ali znaj da ima dosta dobrih resenja.
[ -zombie- @ 29.11.2003. 21:48 ] @
teoretski može, ali je praktično malo teže. recimo, te funkcije koje ti koristiš koriste druge funkcije/tipove/klase/konstante/promenjive iz tih unita, pa zato to nije tako lako ostvarivo.

znači, teoretski, mogao bi da napraviš "light native units" (valjda bi mogao da zameniš sve osim system.pas i možda još neke), ali vrlo retko se to radi.

i ne razumem koji je problem u par stotina kb. ako baš insistiraš, možeš posle na iskompajliranom izvšrnom fajlu da iskoristiš neki exe packer.

a možeš da koristiš i deljene biblioteke. znači, ubaciš .bpl fajlove u windows direktorijum, a tvoji iskompajlirani fajlovi svi budu ispod 100k. dobro, ovo nije neko poboljšanje ako imaš jedan program, ali ako imaš 3-4, već ima razlike...
[ reiser @ 29.11.2003. 22:30 ] @
Nikako mi ne odgovara da je velicina fajla iznad 100kb. Uocio sam da mi Forms, Dialogs i Registry odnose oko 380 Kb ! (a ceo executable fajl je 420 Kb), tako da sam izbacio Forms, Dialogs i Registry, i sve naredbe od strane ovih unita sam zamenio drugim procedurama/funkcijama koje rade istu stvar (thx god that there is MSDN :)). Takodje cu ga packovati i sa UPX.
Hvala.
[ byTer @ 29.11.2003. 22:31 ] @
Moze. Kompajliraj fajl bez Uses (odnosno onamo u project properties podesi iskljuci compile using real time... sta vec bese. E onda startuj dependancy viewer ili neki slicni program i onda pokupi sve biblioteke koje ce ti trebati (u oba slucaja) da bi program mogao da radi.
[ reiser @ 30.11.2003. 12:57 ] @
Moze li neko da mi objasni kako da zapisem podatak u registry i da ga izbrisem, bez Registry unita ? (RegCreateKey(ex), RegDeleteKey...)

Da li je dobro da izvrsavam neki program sa ShellExecute(HWND_BROADCAST,...) handlerom ?
[ byTer @ 30.11.2003. 18:13 ] @
Citat:
Marko Paunovic:
Moze li neko da mi objasni kako da zapisem podatak u registry i da ga izbrisem, bez Registry unita ? (RegCreateKey(ex), RegDeleteKey...)


A sto da komplikujes. Mislim da moze da se uradi uz pomoc APIja ali ne moze...

Citat:
Marko Paunovic:
Da li je dobro da izvrsavam neki program sa ShellExecute(HWND_BROADCAST,...) handlerom ?


Ovaj metod je dobar ukoliko ne moras mnogo da baratas sa otvorenim programom. Zato samo -->
[ reiser @ 01.12.2003. 17:44 ] @
Citat:
A sto da komplikujes. Mislim da moze da se uradi uz pomoc APIja ali ne moze...

Protumaci mi ovo plz :)

Ma moze sigurno da se zapise, video sam da RegOpenKey radi, i da pomocu njega moze da se cita registry. Sta onda treba da rade RegCreateKey i RegDeleteKey ???
[ MilošV @ 02.12.2003. 07:16 ] @
Dobar dan :)

Sto ne probas sa nekim .exe kompresorom?
Npr. UPX, evo sad sam bas probao da bih imao tacne podatke kojim cu ga pohvaliti :) : *.exe fajl velicine 828KB (dobijen iz C++ Builder-a) smanjio je na 313KB sa default vrijednoscu kompresije tj. kompresija moze biti i veca...
Evo ga i link:
http://upx.sourceforge.net/
[ reiser @ 02.12.2003. 13:40 ] @
Citat:
tizza:
Dobar dan :)

Sto ne probas sa nekim .exe kompresorom?
Npr. UPX, evo sad sam bas probao da bih imao tacne podatke kojim cu ga pohvaliti :) : *.exe fajl velicine 828KB (dobijen iz C++ Builder-a) smanjio je na 313KB sa default vrijednoscu kompresije tj. kompresija moze biti i veca...
Evo ga i link:
http://upx.sourceforge.net/


http://www.elitesecurity.org/tema/35768/0#242368
(vidi zadnju recenicu)
[ MilošV @ 03.12.2003. 06:23 ] @
Citat:
Marko Paunovic:
Takodje cu ga packovati i sa UPX.
Hvala.

Sorry
[ goblin @ 03.12.2003. 09:50 ] @
Citat:
Marko Paunovic:
Citat:
A sto da komplikujes. Mislim da moze da se uradi uz pomoc APIja ali ne moze...

Protumaci mi ovo plz :)

Ma moze sigurno da se zapise, video sam da RegOpenKey radi, i da pomocu njega moze da se cita registry. Sta onda treba da rade RegCreateKey i RegDeleteKey ???


ema mnogo cimanja oko ovoga. Sve sto treba da uradis to je da otvoris Registry.pas i da pogledas koju su oni filozofiju iskoristili u implementiranju TRegistry klase (ona je bazirana na ovim WinAPI funkcijama). Ja sam ovo odradio pre neki dan (nemam kod na ovom racunaru posto pisem sa fakultetskog) i sve sto treba da znas jeste da prvo otvoris KLJUC, zapises vrednost sa drugom funkcijom (RegWriteValue valjda) i to je to. Poenta je da uneses varijablu key:HKEY koja ce biti jedna od parametara prvoj funkciji koju pozivas. Posle istu iskoristis kada pozivas drugu funkciju. Lako zar ne? :) Ako ima problema vici, ali od mene mozes da dobijes odgovor tek za vikend...

P.S. Inace, BPLove koristite SAMO kada imate kolekciju od nekoliko aplikaciaj koje zajedno koriste VCL (ili neki vas paket). Tako cete ukupnu velicinu kolekcije smanjiti. Pozdrav
[ reiser @ 03.12.2003. 22:55 ] @
Hvala svima na odgovorima, resio sam. Evo source koda, mozda ce nekome biti od koristi :
Code:

// Delete key from Registry
procedure RegDelKey(root : HKEY; path, value : String);
var
 hndKey : HKEY;
begin
 RegCreateKey(root, PChar(path), hndKey);
 RegDeleteValue(hndKey, PChar(value));
 RegCloseKey(hndKey);
End;

// Add key to Registry
procedure RegAddKey(root : HKEY; path, name, value : String);
var
 hndKey : HKEY;
begin
 RegCreateKey(root, PChar(path), hndKey);
 RegSetValueEx(hndKey, PChar(name), 0, REG_SZ, PChar(value), Length(value) + 1);
 RegCloseKey(hndKey);
End;