Solved

Delphi exe size

Posted on 2002-03-25
5
213 Views
Last Modified: 2010-04-04
If I create a new clean application which uses no extra unit my project is about 16kb, if I include lets say inifiles in uses clause the file growns even when I don't use anything from inifiles.pas.
Why does delphi include code from inifiles when it is unneeded ? Is there a way to remove this unused code ?
0
Comment
Question by:bnz
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
5 Comments
 
LVL 9

Expert Comment

by:ginsonic
ID: 6893821
Is included because you ask it . The inifiles unit is declared into uses ( by you ) so the compiler add this 'library' into compiled version.
If you don't need some units just remove these from uses section.

If you don't know if use some units or not, just remove one by one and try to run the application . If receive error mesages then undo . Do that for all declared units ( but one be one ) .
0
 
LVL 1

Expert Comment

by:slavikn
ID: 6894398
You can make a package. It is very small because is doesn't compile any units. It uses DLLs which are included in the Windows directory. It doesn't work sometimes because a certain DLL may be old...
0
 
LVL 14

Accepted Solution

by:
AvonWyss earned 100 total points
ID: 6895068
Units can have initializations, that is, code that is executed when loading or stopping the application. These are used to initialize things needed for that particular unit to work. Now, your example IniFiles itself does not have such initializations, but it does include other units: Windows, SysUtils, Classes and Consts. Both SysUtils and Classes do have initializations; SysUtils mainly to provide exception handling and Classes mainly for the streaming system. So that's the code that is added - and executed - to your EXE.

Note that the Forms unit is making your EXE grow about the most. So unless you use it (GUI stuff), you should not include it directly or indirectly if you want to have a small EXE file.
0
 
LVL 14

Expert Comment

by:DragonSlayer
ID: 6895433
Shrink the size of your .EXE using the UPX tool... get the latest version from http://upx.sourceforge.net/
0
 
LVL 34

Expert Comment

by:Slick812
ID: 6895624
hello bnz, you can remove the unneeded Kb by rewriting the units (SysUtils and Classes) and only including the functions and initialization code that you need for your app, but this can take time and requires API knowledge. You could use API and leave out the inifiles unit altogether.

var
IniName: PChar;
CharBuffer: array[0..255] of Char;


IniName := 'C:\App Folder\this.ini';

  GetPrivateProfileString(FormPos,'Top','70', CharBuffer, SizeOf(CharBuffer), IniName);
  {GetPrivateProfileString reads the specified String or gets the lpDefault
  if there is no string to read}
  Top := Str2Int(String(CharBuffer));
  {get the Top and Left for the window position}
  GetPrivateProfileString(FormPos,'Left','70', CharBuffer, SizeOf(CharBuffer), IniName);
  Left := Str2Int(String(CharBuffer));



procedure ShutDown;
var
WinPlace: TWindowPlacement;
begin
WinPlace.length := SizeOf(TWindowPlacement);
GetWindowPlacement(hNoteHandle,@WinPlace);
WritePrivateProfileString(FormPos,'Top',PChar(Int2Str(WinPlace.rcNormalPosition.Top)), IniName);
{WritePrivateProfileString writes to an Ini file}
WritePrivateProfileString(FormPos,'Left',PChar(Int2Str(WinPlace.rcNormalPosition.Left)),IniName);
PostQuitMessage(0);
end;


Are you trying to create an app without the Forms unit?
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

A lot of questions regard threads in Delphi.   One of the more specific questions is how to show progress of the thread.   Updating a progressbar from inside a thread is a mistake. A solution to this would be to send a synchronized message to the…
Have you ever had your Delphi form/application just hanging while waiting for data to load? This is the article to read if you want to learn some things about adding threads for data loading in the background. First, I'll setup a general applica…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

710 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question