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äckig 😞

    So 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 Initialisierung

    String       _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 jung 🕶

    Muss man erst mal drauf kommen 🙄

    THX & grüssle 🙂


Anmelden zum Antworten