Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   C++ DLL ohne VCL und Resourcen erstellen (https://www.delphipraxis.net/137571-dll-ohne-vcl-und-resourcen-erstellen.html)

Phoner 23. Jul 2009 15:57


DLL ohne VCL und Resourcen erstellen
 
Hallo,

ich nutze den C++ Builder 2009 um eine DLL zu bauen, welche aus einigen statischen Libraries besteht.
Es wird keinerlei VCL oder sonstige GUI Elemente verwendet. Trotzdem enthält die DLL Resourcen mit einem MainIcon und der Dependency Viewer zeigt mir, dass eine Abhängigkeit zur GDI32.DLL besteht.
Wie kann ich das vermeiden?
Das Projekt selbst als auch alle Unterprojekte enthalten ein "<NoVCL>true</NoVCL>". Es wird auch nirgends die "vcl.lib" in einer cbproj-Datei angegeben.

Auf exakt dem gleichen Sourcecode basierend kann ich mit VC++ 2008 die DLL bauen. Dort ist die Datei wesentlich kleiner und enthält natürlich auch keine Abhängigkeit zur GDI32.DLL. Die Resourcen gibt es selbstverständlich auch nicht.

Kann man den C++ Builder also irgendwie sonstnoch davon überzeugen, dass keinerlei GUI gebraucht wird?

himitsu 23. Jul 2009 16:42

Re: DLL ohne VCL und Resourcen erstellen
 
es wird wohl wie in Delphi sein...

die Delphi-Units/C-Headerdateien binden selber bestimmte Dinge ein, welche sie selber denkten zu benötigen.

Und da du bestimmt einige C-Builder-eigene Dateien einbindest, werden diese das bestimmt mit in dein Programm einbauen.

Die "selben" Dateien vom VC++ werden wohl anders aufgebaut sein und diese Codegear-eigenen Dinge nicht enthalten.

Phoner 23. Jul 2009 17:15

Re: DLL ohne VCL und Resourcen erstellen
 
Irgendwie kann ich mir nicht wirklich vorstellen, dass dies mit dem C++ Builder nicht möglich sein soll.
Abgesehen davon erwarte ich von einem Linker, dass er solche nicht gebrauchten Referenzen einfach raus nimmt. In meinem ganzen Source wird nichts Grafisches benutzt.

In der erzeugten Map-Datei sehe ich folgendes:
0001:0015F600 ___CRTL_VCLLIB_Linkage
0001:0015F5FC ___CRTL_VCL_Exit
0001:0015F5F8 ___CRTL_VCL_Init

Irgendjemand muss doch diese Funktionen aufrufen - oder der Linker ist wirklich unter aller Sau.

himitsu 23. Jul 2009 17:42

Re: DLL ohne VCL und Resourcen erstellen
 
"nicht gebraucht" ist vielleicht etwas falsch ausgedrückt.

Da werden viele Dinge beim Programmstart initialisiert, welche "viele" oftmals verwenden
oder wo Codegear/Borland der Meinung war diese täten es. :angel2:

tja, und was in diesen Initialisierungen aufgerufen wird, wird mit einkompiliert, selbst wenn es dann anderswo nicht verwendet wird.
(in der Initialisierung wird es ja benutzt)

Und was Resourcen betrifft, da bindet der Compiler gnadenlos alles ein, was er findet, da es dort keine Prüfung gibt, ob es nicht irgendwo verwendet wird.





Einfaches Delphibeispiel:
Delphi-Quellcode:
Program Project1;

{$APPTYPE CONSOLE}

Uses SysUtils;

Begin
End.
38 KB
Delphi-Quellcode:
Program Project1;

{$APPTYPE CONSOLE}

Begin
End.
18 KB

Phoner 24. Jul 2009 09:19

Re: DLL ohne VCL und Resourcen erstellen
 
Dann frage ich mich, wieso es die <NoVCL> Option überhaupt gibt. Bei Verwendung des Wizards (DLL erstellen) wird das ja auch explizit abgefragt.
Ich vermute mal, dass irgendeine andere Projekt-Eigenschaft bei mir noch falsch ist.

himitsu 24. Jul 2009 09:28

Re: DLL ohne VCL und Resourcen erstellen
 
ich weiß ja nicht, was dein Programm so macht, aber du mußt dann ntürlich auch noch aufpassen, daß du selber nix verwendest, was auch nur entfernt was mit der VCL zu tun hat, aber alles bekommt man garnicht oder nur schwer raus.

z.B. werder in Delphi auch fast immer Resourcen mir allen möglichen Mauszeigern und den Lokalisierten Monats- und Wochentagsnamen eingebunden, selbst wenn ich die eigentlich zu 99,9% nicht benötige. :wall:

Phoner 24. Jul 2009 09:51

Re: DLL ohne VCL und Resourcen erstellen
 
Meine DLL habe ich mit VC++ erstellt - da funktioniert ja auch alles. Mit genau dem gleichen Source habe ich nun per C++ Builder ein Projekt aufgesetzt. Das habe ich deshalb gemacht, um den Codeguard nutzen zu können - aber das nur am Rande. In der Release-Version ist der Codeguard aber nicht aktiv.
Mein ganzer Source verwendet definitiv nichts von der VCL - oder sonstigen grafischen Kram. Sonst hätte ich ja die Abhängigkeit zur GDI32.DLL ja auch mit VC++.

himitsu 24. Jul 2009 10:18

Re: DLL ohne VCL und Resourcen erstellen
 
du mußt es ja nicht selbst verwendet haben ... du brauchst ja nur Dateien eingebunden haben, worin im C++-Builder halt derartige Aufrufe vorhanden sind.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:04 Uhr.

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