AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DLL ohne VCL und Resourcen erstellen

Ein Thema von Phoner · begonnen am 23. Jul 2009 · letzter Beitrag vom 24. Jul 2009
Antwort Antwort
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#1

DLL ohne VCL und Resourcen erstellen

  Alt 23. Jul 2009, 16:57
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

Re: DLL ohne VCL und Resourcen erstellen

  Alt 23. Jul 2009, 17:42
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#3

Re: DLL ohne VCL und Resourcen erstellen

  Alt 23. Jul 2009, 18:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: DLL ohne VCL und Resourcen erstellen

  Alt 23. Jul 2009, 18:42
"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.

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
$2B or not $2B
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#5

Re: DLL ohne VCL und Resourcen erstellen

  Alt 24. Jul 2009, 10:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

Re: DLL ohne VCL und Resourcen erstellen

  Alt 24. Jul 2009, 10:28
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Phoner

Registriert seit: 8. Okt 2008
23 Beiträge
 
#7

Re: DLL ohne VCL und Resourcen erstellen

  Alt 24. Jul 2009, 10:51
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++.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

Re: DLL ohne VCL und Resourcen erstellen

  Alt 24. Jul 2009, 11:18
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.
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:06 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