Zitat von
Olli:
gibt es eine Methode um ohne externe Tools (i.e. nur BCB6) die Exporte in den mit BCB erzeugten Binaerdateien zu verhindern. Ich habe diese nervige Angewohnheit von BCB6 erst kuerzlich bemerkt, kann es ihm aber auch nicht abgewoehnen.
Was das __CPPDebugHook-Symbol angeht, so kannst du es loswerden, indem du die Export-Definition in $(BCB)\Source\
Rtl\Source\startup\c0nt.asm auskommentierst (auch die weiter unten in der Datei zu findende Referenzierung muß beseitigt werden) und die C++-
RTL kompilierst. Daß die Übersetzung irgendwann mit einem Fehler abbricht, sollte nicht stören, da die Startup-Objektdateien zu diesem Zeitpunkt bereits übersetzt sind und Fehler lediglich in für den Debug-Modus kompilierten Dateien auftreten sollten, die den Code referenzieren. Allerdings solltest du eine Debug-Version der c0*.obj-Dateien behalten, die das Symbol exportieren. Eine Möglichkeit ist, die vorhandenen Dateien nach $(BCB)\Lib\Debug zu verschieben und die angepaßten Versionen in $(BCB)\Lib\Release unterzubringen, doch mußt du dann für Debug- und Release-Build die Projektoptionen entsprechend anpassen. (In C++Builder 2006 und höher gibt es dafür endlich die Build-Konfigurationen.) Ähnliches Vorgehen dürfte auch für _GetExceptDLLinfo möglich sein, jedoch habe ich das noch nicht getestet.
Die Initialize- und Finalize-Symbole für deine Units kannst du loswerden, wenn du #pragma
package(smart_init) entfernst (alle Konsequenzen für die Initialisierung statischer Daten und für Packages sind in der Hilfe zu #pragma
package dokumentiert). Symbole wie _MyForm, die davon herrühren, daß C++Builder standardmäßig eine globale Variable und Instanz für jedes Formular erzeugt, kannst du in den jeweiligen Headerdateien entfernen (die Zeile extern
PACKAGE TMyForm *MyForm
.
Ein
QC-Eintrag zum Thema wäre
hier zu finden.
Zitat von
Olli:
Auch gibt es noch eine andere nervige Sache. Aus mir unbekanntem Grund benutzt eines der Kompilate SHDOCVW.OCX, obwohl der Code nichts dergleichen referenziert. Da ist das Smartlinking wohl nicht so smart wie zu erwarten, oder uebersehe ich etwas?
Vielleicht hilft es, in den Projektoptionen die Liste der Packages zu leeren oder zu optimieren.
Ansonsten: ist tatsächlich nirgendwo im Code ein #include "SHDocVw_OCX.h" oder ein #pragma link "SHDocVw_OCX" zurückgeblieben?