Laufzeitpackages Compilerversionen



  • Hallo zusammen

    Verwende momentan C++ Builder 2009 und werde demnächst die ersten größeren Projekte mit 2010 beginnen.
    Aus verschiedenen Gründen verwende ich die VCL und RTL als dynamisches Package, unter anderem auch in DLLs.

    Wenn ich mich jetzt recht erinnere könnte es mit den 2009 DLLs doch Probleme mit 2010 Programme geben, oder nicht?

    Ich gehe davon aus, daß ich eine DLL für den 2009 und eine für den 2010 benötige, was im Prinzip auch kein Problem ist, da ich die Compilerversion im Dateinamen habe.

    Den Code welcher die DLL dynamisch lädt, würde ich jedoch gerne sowohl im 2009 sowie 2010 verwenden. Da ich jedoch zwei verschiedene DLLs habe muß ich den Compiler unterscheiden können.

    Wie kann ich im Code unterscheiden welcher Compiler verwendet wird?

    Habe bisher folgendes geunden (allerdings ist meistens explizit die Rede von Delphi):
    - CompilerVersion kennt der Compiler jedoch nicht
    - VERxxx kennt der Compiler auch nicht
    - RTLVersion kennt der Compiler, bin mir jedoch nicht sicher ob dies das ist was ich suche.

    Kann hier jemand etwas Licht ins Dunkle bringen?
    Vielen Dank im Voraus.

    MfG Stephan



  • Stephan schrieb:

    Wie kann ich im Code unterscheiden welcher Compiler verwendet wird?

    Die Präprozessorkonstante __BORLANDC__ ist eine hexadezimal codierte Versionsnummer. Für BCC v6.30 hat __BORLANDC__ also den Wert 0x630.

    Vermutlich bist du der IDE-Konvention gefolgt und hast die Packages nach der Delphi-Versionsnummer (z.B. "mypackage120.bpl" für C++Builder 2009) benannt. Vielleicht hilft dann das beim Umrechnen:

    BCC32 | DCC32    | C++-RTL | IDE | Release | Packages | Name
    ======|==========|=========|=====|=========|======================
    5.6   | 14.0     | 60      |  -  | 6.0     |  60      | Delphi/C++Builder 6
    5.8   | 18.0     | 70      | 4.0 | 10.0    | 100      | BDS 2006
    5.9   | 18.5     | 80      | 5.0 | 11.0    | 100      | RAD Studio 2007
    6.1   | 20.0     | 90      | 6.0 | 12.0    | 120      | RAD Studio 2009
    6.2   | 21.0     | 100     | 7.0 | 14.0    | 140      | RAD Studio 2010
    6.3   | 22.0     | 110     | 8.0 | 15.0    | 150      | RAD Studio XE
    
    "BCC32" - der C++-Compiler
    "DCC32" - der Delphi-Compiler
    "C++-RTL" - die RTL-DLL, also cc32*.dll und cc32*mt.dll
    "IDE" - die Versionsnummer der "Galileo"-IDE (C++Builder 6 hatte noch die alte IDE)
    "Release" - Versionsnummer des Delphi-Releases
    "Packages" - Suffix für die Laufzeitpackages
    

    Du mußt natürlich berücksichtigen, daß die jeweiligen Update-Packs meist die BCC-Versionsnummer verändert haben, also etwa 6.20 -> 6.21. Die Tabelle enthält einige Unregelmäßigkeiten, so daß die Umrechnung nicht ganz linear ist. Im Detail:

    • BDS 1.0 war C#Builder, BDS 2.0 Delphi 8 für .NET und BDS 3.0 war Delphi 2005.
    • Delphi 7, Delphi 8 für .NET und Delphi 2005 hatten kein C++Builder-Pendant.
    • DCC32 hat aufgrund der Binärkompatibilität zwischen BDS 2006 und RAD Studio 2007 eine "halbe" Versionsnummer (DCCIL, der Delphi for .NET-Compiler, hatte im 2007er-Release die Versionsnummer 19.0). Aus demselben Grund heißen die IDE-Packages auch "*100.bpl" und nicht "*110.bpl".
    • Die Version 13.0 wurde gemäß der Landessitte übersprungen.
    • Ob BCC v5.7 existierte, weiß ich nicht, aber ich vermute, daß dieser Compiler mit Borland C++ 2005 ausgeliefert werden sollte, das der geplante Nachfolger von C++BuilderX war. Borland C++ 2005 wurde allerdings sehr schnell wieder vom Markt genommen (bzw. hat große Teile des Marktes nie erreicht), weil man zwischenzeitlich entschieden hatte, den "herkömmlichen" C++Builder weiterzuentwickeln.
    • BCC 6.0 gab es auch, aber das war ein experimenteller Compiler auf der Basis des EDG-Frontends, der als Technical Preview mit C++BuilderX ausgeliefert wurde. Mit dem bekannten BCC hatte er bis auf den Namen nichts gemein. Zeitlich gehört er zwischen BCC 5.6 und 5.7. BCC 6.1 ist dann wieder ein "herkömmlicher" BCC und der direkte Nachfolger des BCC 5.9.

    Die Liste ist natürlich ohne Gewähr; speziell RAD Studio 2007 hatte ich nie produktiv eingesetzt, so daß ich da nicht ganz sicher bin.

    Ab RAD Studio 2010 sollte es für eine Weile linear weitergehen, so daß du deinen Code derart schreiben kannst, daß die zukünftige Migrierung auf, sagen wir, C++Builder XE3 an dieser Stelle keine Änderung erfordert.

    Edit: C++-RTL-Version eingefügt



  • @audacia

    Besten Dank für die Übersicht.
    Die __BORLANDC__ Konstante kannte ich, daß dies allerdings ein kodierter Hexwert ist, wusste ich nicht.
    Werd ich dann gleich mal ausprobieren.

    audacia schrieb:

    Vermutlich bist du der IDE-Konvention gefolgt und hast die Packages nach der Delphi-Versionsnummer (z.B. "mypackage120.bpl" für C++Builder 2009) benannt. Vielleicht hilft dann das beim Umrechnen:

    Ja, ich bin dieser Konvention gefolgt.

    Anhand deiner Antwort, gehe ich davon aus, daß die Annahme daß je eine DLL pro Builderversion benötigt wird richtig ist.

    MfG Stephan



  • Auch von mir Danke für die Übersicht.

    audacia schrieb:

    BCC 6.0 gab es auch, aber das war ein experimenteller Compiler auf der Basis des EDG-Frontends, der als Technical Preview mit C++BuilderX ausgeliefert wurde. Mit dem bekannten BCC hatte er bis auf den Namen nichts gemein. Zeitlich gehört er zwischen BCC 5.6 und 5.7.

    Nur mal aus Interesse. Es muss doch mehrere Varianten des 6.0 gegeben haben ? Ich hab damals eine Einladung zum Betatest des nie veröffentlichten Borland C++ 2005 bekommen, das muss ja einen etwas fortgeschritteneren Compiler gehabt haben, als diese Preview.



  • Stephan schrieb:

    Anhand deiner Antwort, gehe ich davon aus, daß die Annahme daß je eine DLL pro Builderversion benötigt wird richtig ist.

    Ja.

    nn schrieb:

    Nur mal aus Interesse. Es muss doch mehrere Varianten des 6.0 gegeben haben ? Ich hab damals eine Einladung zum Betatest des nie veröffentlichten Borland C++ 2005 bekommen, das muss ja einen etwas fortgeschritteneren Compiler gehabt haben, als diese Preview.

    Ich weiß nicht, wie weit man das "Projekt BCC 6.0" weiterverfolgt hat. In C++BuilderX 1.5 tauchte er, glaube ich, nicht auf, und ich mutmaße, daß man sich schon während der Arbeit an Borland C++ 2005 gegen die Fortführung des Projekts entschieden hat (daher die ebenso mutmaßliche Existenz von BCC 5.7). Allerdings weiß ich über Borland C++ 2005 leider so gut wie nichts.

    Jedenfalls wird die Sache ja gerade wieder aktuell. Roadmap und Management zufolge ist mittelfristig der Einsatz eines externen Frontends geplant.



  • audacia schrieb:

    Jedenfalls wird die Sache ja gerade wieder aktuell.

    Ich habe bisher nur Allen Bauers Newsbeitrag gesehen, wo es hieß 64 Bit für C++ käme etwa ein Jahr nach Delphi. Also könnte es schon in 14 Monaten so weit sein.

    audacia schrieb:

    Roadmap und Management zufolge ist mittelfristig der Einsatz eines externen Frontends geplant.

    Um die Numerierung konsistent zu halten, könnte man statt 6.5 ja eine 7.0 einschieben. 🤡



  • nn schrieb:

    Ich habe bisher nur Allen Bauers Newsbeitrag gesehen, wo es hieß 64 Bit für C++ käme etwa ein Jahr nach Delphi. Also könnte es schon in 14 Monaten so weit sein.

    Ja, das ist, soweit ich weiß, der Plan.

    nn schrieb:

    Um die Numerierung konsistent zu halten, könnte man statt 6.5 ja eine 7.0 einschieben. 🤡

    Oder mal aus dem "BCC" einen "ECC" machen. Wer weiß.


Anmelden zum Antworten