Projekt von BCB4 -> BCB2007
-
Hi Gemeinde,
Habe ein Problem mit Übernahme eines Prj von BCB4 nach BCB2007, jew. Pro.
Der Import in BCB2007 funktioniert, aber dann kommen die Fehler. Die meisten habe ich bereits rausbekommen, aber einige halten sich hartnäckigSo z.B. der hier:
[ILINK32 Fehler] Error: Nicht auflösbares externes '_FontName' referenziert von C:\PRJ2007\PRJ\DEBUG_BUILD\FILE_IO.OBJ
_FontName ist ein: 'extern String', definiert im Projekt( 1 - n Files, .cpp oder .h ). Nicht in einer DLL oder sonstwo.
Mein erster Gedanke war dass er hier etwas nicht dazu linken kann. Muss er aber auch nicht.
Was könnte es noch sein? Jemand noch 'ne Idee?Thx & grüssle
-
Hallo
Doch es muß noch etwas gelinkt werden. Wenn in deiner Headerdatei sowas steht
extern String x;
dann ist das nur eine Deklaration. Dazu muß immer noch eine konkrete Implementatio
String x = "Hallo";
in eine cpp-Datei.
Das war vermutlich auch in BCB4 so. Ich glaube bei deiner Konvertierung ist die cpp-Datei aus dem Projekt geflogen, die must du wieder einbinden.bis bald
akari
-
Ja ne, is klar,
wenn ich bei der Def gleich auch Initialisiere, dann gehts.
Also sowas funktioniert:
[cpp]extern String _FontPath = "";[/cpp]Allerdings werden alle Variablen & Co - und das sind viiiiiele - im .cpp erstellt, und dann bei Bedarf nach Aufruf im .cpp mit Werten versorgt.
Mit dem BCB4 funktionierts ohne Vorbelegung mit Werten, also so:extern String _FontPath;
grüssle
-
Smitty schrieb:
Ja ne, is klar,
Na so klar scheint dir der Umgang mit extern doch nicht zu sein
wenn ich bei der Def gleich auch Initialisiere, dann gehts.
Also sowas funktioniert:
[cpp]extern String _FontPath = "";[/cpp]Das ist aber nicht korrekt. Nicht-integre Datentypen dürfen nicht in Headerdateien initialisiert werden. Zumindestens mein BCB5 gibt mit dafür auch die korrekte Warnung aus :
[Linker Warning] Public symbol '__FontPath' defined in both module ...\UNIT1.OBJ and ...\UNIT2.OBJ
Allerdings werden alle Variablen & Co - und das sind viiiiiele - im .cpp erstellt, und dann bei Bedarf nach Aufruf im .cpp mit Werten versorgt.
Mit dem BCB4 funktionierts ohne Vorbelegung mit Werten, also so:extern String _FontPath;
Der gezeigte Code ist ja auch korrekt. Es kommt ja auch kein Compilerfehler, sondern ein Linkerfehler. Das Problem muß bei einem der beiden Punkte liegen :
- in der cpp fehlt die korrekte InitialisierungString _FontPath = "...";
- die cpp-Datei ist nicht im Projekt eingebunden
bis bald
akari
-
akari schrieb:
Smitty schrieb:
Ja ne, is klar,
Na so klar scheint dir der Umgang mit extern doch nicht zu sein
ja doch - Jetzt
definiert ist das ganze Gedöns im .cpp File.
Im BCB4 reicht es offensichtlich aus, bei der Zuweisung nur noch den Namen zu verwenden. Im 2007'er muss dann noch mal ein 'String' davor.
Ist - so wie es bis jetzt aussieht - nicht nur bei Variablen so, sondern auch bei Funktionen.
Mal sehn, wie's weiter geht. Der Tag ist ja noch jungMuss man erst mal drauf kommen
THX & grüssle