Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Warum wird die Ressource verändert? (https://www.delphipraxis.net/206459-warum-wird-die-ressource-veraendert.html)

venice2 23. Dez 2020 12:58

Warum wird die Ressource verändert?
 
Ich erstelle ne Ressource.

Code:
IDR_VERSION1 VERSIONINFO
FILEVERSION 1,1,0,0
PRODUCTVERSION 1,1,0,0
FILEOS 0x00000004
FILETYPE 0x00000001
BEGIN
  BLOCK "StringFileInfo"
  BEGIN
    BLOCK "04070000"
    BEGIN
      VALUE "FileVersion", "1.1.0.0\0"
      VALUE "ProductVersion", "1.1.0.0\0"
      VALUE "CompanyName", "BrewIdeas@Emil Weiss\0"
      VALUE "FileDescription", "Tracer64\0"
      VALUE "InternalName", "Tracer64\0"
      VALUE "LegalCopyright", "2020 by Emil Weiss\0"
      VALUE "LegalTrademarks", "BrewIdeas@Emil Weiss\0"
      VALUE "OriginalFilename", "Tracer64.dll\0"
      VALUE "ProductName", "Tracer64\0"
    END
  END
  BLOCK "VarFileInfo"
  BEGIN
    VALUE "Translation", 0x0407, 0x0000
  END
END
Jetzt meine einfache Frage warum wird bei 64 Bit dieser ganze Müll vom Compiler hinzugefügt?
Wie kann ich das abstellen.!

Ich mache doch nicht umsonst eine Minimal Ressource.
20 Zeilen Code und eine DLL > 3MB was für ein Schmarrn

Rein Programmiertechnisch gesehen sind das gerade mal 45K. (An Bit und Bytes) Wenn überhaupt!

Die gleiche DLL mit PowerBasic kompiliert ist 52KB groß nur mal so nebenbei.

Rolf Frei 23. Dez 2020 13:48

AW: Warum wird die Ressource verändert?
 
Weil jedes Delphiprogamm eine Unmenge an RTTI Informationen mit reinkompiliert. Wenn dich die Grösse stört nimm Delphi 7 oder sonst was altes, das noch ohne RTTI funktioniert. Die neuen Delphikompiler produzieren dank RTTI riesige Dateien, auch wenn sonst nichts im Programm gemacht wird. Das lässt sich leider nicht abschalten.

Hast du irgendwo die Forms Unit includiert und brauchst du diese? Wenn man ohne diese auskommt wird das Programm shon mal deutlich kleiner, aber immer noch weit entfernt von dem was man erwarten würde. Wirklich kleine Anwendungen sind mit aktuellen Delphi's leider nicht mehr möglich.

venice2 23. Dez 2020 13:51

AW: Warum wird die Ressource verändert?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1479760)
Weil jedes Delphiprogamm eine Unmenge an RTTI Infornmatiion mit einkompiliert. Wenn dich die Grösse stört nimm Delphi 7 oder sonst was altes, das noch ohne RTTI funktioniert. Die neuen Delphikompiler produzieren dank RTTI riesige Dateien, auch wenn sonst nichts im Programm gemacht wird. Das lässt sich leider nicht abschalten.

Traurig.
Das es auch anders geht sehe ich an PowerBasic.
Diesen Müll braucht man nicht wirklich.

Daniel 23. Dez 2020 14:03

AW: Warum wird die Ressource verändert?
 
Welche Compiler-Schalter hast Du denn gesetzt, um die Menge an RTTI-Informationen zu reduzieren?

venice2 23. Dez 2020 14:08

AW: Warum wird die Ressource verändert?
 
Zitat:

Zitat von Daniel (Beitrag 1479762)
Welche Compiler-Schalter hast Du denn gesetzt, um die Menge an RTTI-Informationen zu reduzieren?

Delphi-Quellcode:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}
Ich weis das es nicht kleiner geht aber es will mir nicht in den Kopf warum.
Abhängig vom Compiler Type ist es ohne weiteres möglich kleine Daten zu generieren abhängig von der fast realen Größe an Bit und Bytes.
Das nervt halt manchmal.

Das ist alles an Code..


warum muss die EXE nun 3,5 MB groß sein.
Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!

himitsu 23. Dez 2020 14:10

AW: Warum wird die Ressource verändert?
 
Die "StringTables", das ist alles, was im Delphi mit
Delphi-Quellcode:
resourcestring
definiert wurde. (damit Sprachübersetzungen an die Konstanten rankommen)
Units SysConst sind immer enthalten und müssen drin bleiben.
Man könnte die Tabellen editireren ein Einträge/Zeilen, die man "denkt" niemals zu brauchen, durch ein Leerzeichen (1 Char) ersetzen.

"24" (WindowsManifest) kann man in den Projektoptionen abschalten (das würde ich aber nicht weglassen, vorallem nicht den OS-Kompatibilitätsabschnitt)

Die Icons/IconGroup kommen immer rein, entweder Deines oder ein StandardIcon.
Die könnte man aber nachräglich löschen. (RessourceEditor)
Oder du verwendest ein kleines einfarbiges SchwarzWeisIcon. (1 Bit Farbtiefe)

DVCLAL gehört zur Delphi-Lizenz und gibt an mit welcher Delphiversion, bzw. mit welcher Edition (Starter/Pro/Ent/Arch) kompiliert wurde.
De muß drin bleiben. (wird auch von einigen Programmteilen benutzt, z.B. von Komponenten der Architect, welche nicht in anderen Editionen laufen wollen/dürfen)

PACKAGEINFO ist eine UnitListe.
k.A. ob eine alleinstehende EXE die verwendet, aber beim Laden von Packages (BPL) sind sie zwingend notwendig.

das neue PLATFORMTARGETS seit Delphi 10.irgendwas (keine Ahnung, aber ist eh unbedeutend Klein)

MSG_ERROR/INFO/WARNING willst du haben, da du irgendwo die Dialogs.res (Vcl.Dialogs / Dialogs.pas) eingebunden hast.

Rolf Frei 23. Dez 2020 14:12

AW: Warum wird die Ressource verändert?
 
Diese Compilerswitches bringen nicht wirklich was, weil diese nur auf den eigenen Code Auswirkung hat. Um das ganze RTTI Zeugs in dene Basis Units zu entfernen, müsste die Delphi Basisklassen (System, Classes, etc) neu ohne RTTI kompiliert werden. Das geht aber nicht so einfach, wie man meinen könnte. Eigentlch ist das unmöglich, weil man die System untis nicht neu konmpilieren kann.

OP du kannst ja mal folgende Switsches verwenden, wird dir aber wegen obigen Gründen auch nicht wirklich weiterhelfen.
Code:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

venice2 23. Dez 2020 14:15

AW: Warum wird die Ressource verändert?
 
Zitat:

Zitat von Rolf Frei (Beitrag 1479765)
Diese Compilerswitches bringen nicht wirklich was, weil diese nur auf den eigenen Code Auswirkung hat. Um das ganze RTTI Zeugs in dene Basis Units zu entfernen, müsste die Delphi Basisklassen (System, Classes, etc) neu ohne RTTI kompiliert werden. Das geht aber nicht so einfach, wie man meinen könnte. Eigentlch ist das unmöglich, weil man die System untis nicht neu konmpilieren kann.

OP du kannst ja mal folgende Switsches verwenden, wird dir aber wegen obigen Gründen auch nicht wirklich weiterhelfen.
Code:
{$WEAKLINKRTTI ON}
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])}

Habe ich schon drin siehe Code oben.
Na bringt max 200 KB.

Ich wollte nur sagen das es mich nervt.
Wenn es nicht anders abschaltbar ist dann ist gut. ;)
Aber trotz alle dem es geht auch anders.

Bernhard Geyer 23. Dez 2020 14:19

AW: Warum wird die Ressource verändert?
 
Zitat:

Zitat von venice2 (Beitrag 1479763)
Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!

Und wieso nutzt du dann dafür nicht weiter PowerBasic?
Viele der Vorteile von Delphi bekommt man mit der Komponentenbiliothek.
Wenn du diese nicht nutzt, wieso dann nochmal mit Delphi nachimplementieren?

Meine "kleinste richtige DLL" ist mit 10.2 für Win32 ca. 750kByte.

venice2 23. Dez 2020 14:21

AW: Warum wird die Ressource verändert?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1479767)
Zitat:

Zitat von venice2 (Beitrag 1479763)
Unter PowerBasic habe ich überhaupt keine Ressource inkludiert.
Und die DLL tut ihr Ding!

Und wieso nutzt du dann dafür nicht weiter PowerBasic?
Viele der Vorteile von Delphi bekommt man mit der Komponentenbiliothek.
Wenn du diese nicht nutzt, wieso dann nochmal mit Delphi nachimplementieren?

Meine "kleinste richtige DLL" ist mit 10.2 für Win32 ca. 750kByte.

Es geht nicht darum warum, weshalb sondern das es möglich ist!
Das ist der kleine Unterschied.

Und was verstehst du unter richtige DLL denkst du meine wäre falsch?
Sie tut was sie soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz