Bei einem kleinem digitalen Bilderrrahmen in Schlüsselanhängerform ist eine 122 kB große EXE-Datei mit dabei, um die Bilder draufladen zu können, siehe Screenshot. (Das Programm ist auch angehängt, läuft aber wahrscheinlich nur, wenn der digitale Bilderrahmen am USB gefunden wird). Ich frage mich nun, wie man es schafft, dass so ein Tool nur 122 kB Codegröße hat. Wenn ich in Borland C++ Builder eine Form mit einem Button und Textfeld erstelle, dann hat die EXE-Datei über 400 kB. Selbst wenn ich dann noch mit UPX packe, sind es immer noch 185 kB. Hat jemand einen Tipp, wie man die Codegröße reduzieren kann?
Erfordert diese Datei möglicherweise das NetFramework?? Dann ist das das Geheimnis dahinter, ansonsten ist es meistens die Art wie die GUI programmiert wird, native Anwendungen sind immer größer als Programme, die eine Runtime(Java/.Net) vorraussetzten UPX würde ich nicht unbedingt machen, wenn es nicht extrem wichtig ist, dass du ein paar KB einsparst, macht nur prob mit Antivirensoftware...
Du willst die Codegröße reduzieren? Nein - die Größe der exe - oder? also eine Winforms App mit einem Button und einer Textbox ist für das 2.0er Framework gerade mal 8kB groß. Wahrscheinlich bindet dein Borland alle möglichen DLLs dran (statisch) und nicht dynamisch. Das hat vermutlich den Vorteil, dass du das Ding auf vielen unterschiedlichen OS Installationen laufen lassen kannst ohne dich drum zu kümmern, dass bestimmte Framework Anteile auf dem Rechner installiert sind! Nachteil : große exe ;o) Warum willst du so ein Tool so klein bekommen?
Es gibt Packer wie zB UPX. Die EXE Datei entpackt sich dann immer alleine beim starten...
Irgnedwo habe ich noch gelesen, dass die EXE deutlich kleiner wird, wenn man ohne VCL programmiert, also die Fenster und Komponenten "zur Laufzeit" aus dem Quellcode generiert. Aber wie würde man sowas ohne VCL machen, das wäre vermutlich ein ziemlicher Aufwand, oder?
chrisu das hat ihm bestimmt geholfen ;-) ich hab das file, das du hochgeladen hast mal analysiert, so wie es aussieht wurde es mit Visual C++ von MS geschrieben und bedienst sich an gdi und mfc, alles dynamisch geladen, sodass es auf deinem windows system schon vorhanden sein muss, das spart einiges an KB wenn die dlls dynamisch kommen ;-)
Was willst du denn überhaupt erreichen? Passt das fertige Tool nicht?
Christian R. schrieb: > Was willst du denn überhaupt erreichen? > > Passt das fertige Tool nicht? Doch, aber mich hat halt interessiert, wie so eine verhältnismäßig kleine exe realisiert werden kann. Diese exe ist übrigens im Bilderrahmen selbst gespeichert und wird per USB an den PC hochgeladen und ausgeführt. Eine kleine exe hat dann gleich 2 Vorteile: wenig Speicherplatz im begrenzten Flash des Bilderrahmens und kürzere Übertragungszeit über USB. Marcus B. schrieb: > so wie es aussieht wurde es mit Visual C++ von MS geschrieben > > und bedienst sich an gdi und mfc, alles dynamisch geladen, sodass es auf > deinem windows system schon vorhanden sein muss, das spart einiges an KB > wenn die dlls dynamisch kommen ;-) Sind diese DLLs dann bei Standard-Windows-Installationen schon drauf? Es wird ja nicht jeder Kunde des Bilderrahmens Visual C++ installiert haben? Wenn ich beim Borland ohne Laufzeitpackages linke, dann wird zwar die exe schön klein, es läuft aber nur auf Rechnern mit installiertem Borland.
Also Textboxen, Buttons usw. kann man auch mit Std. Windows-API's erzeugen und eine App draus machen. Das ist zwar mühsam aber es geht. Dann wird auch die exe klein und es funktioniert überall.
Christian R. schrieb: > Also Textboxen, Buttons usw. kann man auch mit Std. Windows-API's > erzeugen und eine App draus machen. Das ist zwar mühsam aber es geht. > Dann wird auch die exe klein und es funktioniert überall. Hast Du einen Link zu einem gut kommentierten Beispiel? Danke.
Karl heinz Buchegger schrieb: > und 122k ist nicht wirklich klein. Im Verhältnis zu den 450 kB von Borland schon... :-)
versuch dich mal hier: http://www.apitalk.com/windows-Programming/Start-Windows-Programming-Win32-Api-Basics.html man muss schon mal wissen, wie so eine Windows App überhaupt funktioniert. aber dieses Bsp. ist schon recht gut!
ist dort der Optimizer eingeschaltet? Wird die Runtime als DLL gelinkt oder statisch? All das sind Fragestellungen, die die EXE-Größe betreffen.
Aber eigentlich will man sich eine Windos-App die auf dem C-API aufsetzt nicht wirklich freiwillig antun :-)
Karl heinz Buchegger schrieb: > ist dort der Optimizer eingeschaltet? > Wird die Runtime als DLL gelinkt oder statisch? > > All das sind Fragestellungen, die die EXE-Größe betreffen. Im Borland habe ich "Mit Laufzeitpackages aktualisieren" und "Dynamische RTL verwenden" jeweils deaktiviert. Das bläht die exe auf, ist aber notwendig, damit sie auch auf Standard-Windowsinstallationen läuft. Wie sieht das bei Microsoft Visual C++ aus, werden da DLLs verwendet, die auch auf Standard-Windowsinstallationen schon vorhanden sind?
450 KB ist doch heutzutage eine absolut zu vernachlässigende Größe. Es wäre in meinen Augen jedenfalls völliger Wahnsinn, auf den Komfort der Borland VCL zu verzichten, nur um eine lächerlich kleine Menge Speicher einzusparen. Einzig und allein für Schadsoftware-Autoren ist die Größe wirklich interessant, weil es da darauf ankommt, dass die Software sich schnell verbreiten und schnell weiterverteilen kann, z.B. über E-Mails. Kleine Tools (ohne GUI) kann mit mit MS Visual C++ auch locker unter 20 KB hinbekommen.
Andreas schrieb: > Für VC++ gibt es mehrere Tutorials zu diesem Thema, z.B. > http://www.catch22.net/tuts/minexe Die Catch22 Seite gefällt mir sehr gut, Danke für den Hinweis!
Welche Einstellungen sind in MS Visual C++ notwendig, damit eine über "CLR Windows Forms Anwendung" erzeugte exe auch auf Standard-Windowsinstallationen läuft?
Das gibts nicht! Eine Winforms App benötigt ein .NET Framework! genauso wie du für eine Java App eine Java-Runtime brauchst!!
Mit welchen Projekteinstellungen in MS Visual C++ könnte denn die DPFMate.exe (Bilderrahmensoftware) erstellt worden sein? Wird für diese Software tatsächlich ein installiertes .NET Framework vorausgesetzt?
Vor langer Zeit habe 3 Zeilen Quelltext kompiliert und hatte hinterher 12k zusätzlichen Müll in der .exe! Wenn es wirklich klein werden soll heißt ein Zauberwort wohl Assembler.
adfix schrieb: > Dieses 3D Spiel hat 96kBytes ! > > http://www.theprodukkt.com/kkrieger Plus DirectX 9.0b hat es dann wie viel?
Recht kompakt (und dabei ohne Abhängigkeiten) werden auch immer statisch gelinkte MFC-Anwendungen, wenn man außer den elementaren GUI-Klassen (CFrameWnd usw.) und allgemeinem Kram wie CString wenig von der MFC nutzt. 100k sind da für kleinere Progrämmchen durchaus typisch.
> Wenn es wirklich klein werden soll heißt ein Zauberwort wohl Assembler. Ach was. Programmieren sollte man halt können, und wissen, was zusätzlich aus Bilbliotheken reingeladen wird. > Wird für diese Software tatsächlich ein installiertes .NET Framework > vorausgesetzt? Kaum. Ist schliesslich eine riesengrosse EXE-Datei. Sie muss wohl JPEG und GIF Decoder-Routinen enthalten, und sonst fast nichts. > Im Verhältnis zu den 450 kB von Borland schon Wenn man erst mal sagt "Ich will sämlichen Komfort (egal ob ich ihn brauche oder nicht) mit reingelinkt bekommen, dann ist die halt so gross. > man ohne VCL programmiert Z.B. diesen "Komfort" (eher: kranken Scheiss). So wie ein Blick ins Programm erahnen lässt, läuft der Bilderrahmen wohl unter WindowsCE (Mobile Windows), und das Programm verwendet GDI32 und OLE.
oszi40 schrieb: > Wenn es wirklich klein werden soll heißt ein Zauberwort wohl Assembler. Eine Windows Applikation in Assembler? Respekt!! Oder ... viel Spaß!
Christian R. schrieb: >> Wenn es wirklich klein werden soll heißt ein Zauberwort wohl Assembler. > > Eine Windows Applikation in Assembler? Respekt!! Oder ... viel Spaß! Die Windowsgeschichten sind nicht viel anders als in C. Sind ja fast alles nur API calls. Antun würde ichs mir trotzdem nur in Ausnahmefällen.
eklige Tunke schrieb: > Plus DirectX 9.0b hat es dann wie viel? Wenn du so anfängst zu rechnen, dann kannst du die Größe des Betriebssystems auch gleich dazurechenen. Denn ohne das gehts ja auch nicht...
der mechatroniker schrieb: > Recht kompakt (und dabei ohne Abhängigkeiten) werden auch immer statisch > gelinkte MFC-Anwendungen, wenn man außer den elementaren GUI-Klassen > (CFrameWnd usw.) und allgemeinem Kram wie CString wenig von der MFC > nutzt. 100k sind da für kleinere Progrämmchen durchaus typisch. Hab ich versucht, komme allerdings auf 304 kB. In den automatisch erstellten Dialog habe ich ein EditControl und einen Button hinzugefügt. Wie könnte man auf ca. 100 kB kommen? Gibt es spezielle Projekteinstellungen?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.