GLScene für C++Builder compilieren



  • Ich habe mir GLScene geladen und wollte dies in "RAD Studio 2009" für den C++Builder2009 einbinden.

    Es gibt dort Packages für "BCB5", "BCB6" und "Delphi2009". Beim Package "Delphi2009" ist GLScene nur für Delphi verfügbar. Ich möchte es aber auch für den C++Builder. Daher habe ich mich dann an BCB6 versucht. Am Ende erhalte ich aber ein:

    [ILINK32 Fehler] Fatal: Datei GLSCENEBCB6.BPI kann nicht geöffnet werden

    Kann mir hier eventuell jemand weiterhelfen? Die Datei existiert leider nirgendwo.



  • Okay. ich habe es fast geschafft. Man muss(zumindest habe ich es einfach getan):

    * "GLSCENEBCB6.BPI" aus dem Projekt "Erfordert" entfernen

    zusätzlich muss man im BCB6 Ordner folgende Dinge in den Dateien (mehrmals) umbenennen:

    * GLWin32FullScreenViewer.pas => GLFullScreenViewer.pas
    * Source\GLScreen.pas => Source\Platform\GLScreen.pas
    * Source\DesignTime\FLibMaterialPicker.pas => Source\PropertyEditors\FLibMaterialPicker.pas
    * Source\DesignTime\FMaterialEditorForm.pas => Source\PropertyEditors\FMaterialEditorForm.pas
    * Source\DesignTime\FRColorEditor.pas => Source\PropertyEditors\FRColorEditor.pas
    * Source\DesignTime\FRFaceEditor.pas => Source\PropertyEditors\FRFaceEditor.pas
    * Source\DesignTime\FRMaterialPreview.pas => Source\PropertyEditors\FRMaterialPreview.pas
    * Source\DesignTime\FRTrackBarEdit.pas => Source\PropertyEditors\FRTrackBarEdit.pas
    * Source\DesignTime\FVectorEditor.pas => Source\PropertyEditors\FVectorEditor.pas
    * Source\DesignTime\GLTextureImageEditors.pas => Source\PropertyEditors\GLTextureImageEditors.pas

    Wenn Dateien nicht gefunden werden, dann deren Pfade hinzufügen...

    Leider erhalte ich am Ende trotzdem noch einen Fehler:

    [DCC Fehler] Schwerwiegender Fehler (Ausnahme von HRESULT: 0x8000FFFF (E_UNEXPECTED))
    

    An der Stelle weiß ich leider nicht mehr weiter. 😕



  • Ich habe das Projekt noch einmal bereinigt und alle offenen Dateien geschlossen. Der Fehler ändert sich dann in:

    [DCC Fataler Fehler] Spline.pas(509): F2084 Interner Fehler: AV05487652-R00000003-0
    

    Dies ist die letzte Zeile in der Spline.pas und enthält

    end.
    

    Die Meldungen werden immer verrückter. ^^°



  • Ich hatte mit GLScene in C++Builder kein Glück. Selbst wenn du es kompilieren kannst (das ist tatsächlich die leichtere Übung, wenn du einfach MSBuild nimmst), wirst du es nicht in C++-Code verwenden können, weil viele der generierten Headerdateien unbrauchbar sind (sie enthalten eine Vielzahl mehrdeutiger Funktionsüberladungen und anderen Unfug).

    Meine Lösung war, für die erforderlichen Komponenten in Delphi Wrapper-Komponenten zu erstellen und darauf zu achten, daß ich die GLScene-Units nur im implementation -Abschnitt referenziere. Klappt soweit gut. Aber natürlich geht es nur, wenn du auch Delphi bzw. RAD Studio hast. Du kannst zwar auch mit C++Builder Delphi-Komponenten schreiben, aber eben ohne IDE-Unterstützung, mit Kompilierung in der Kommandozeile und manueller Installation/Deinstallation.



  • Hier hat jemand exakt das selbe Problem und eine Lösung erhalten: http://stackoverflow.com/questions/10516638/how-can-i-solve-fatal-compiler-errors-when-installing-glscene-into-rad-studio-20

    Aber auch hier ist dann GLScene nur für "RAD Studio - Delphi" verfügbar. Wie bekomme ich es auch für "RAD Studio - C++Builder" in die Tool-Palette?



  • Maik2009 schrieb:

    Aber auch hier ist dann GLScene nur für "RAD Studio - Delphi" verfügbar. Wie bekomme ich es auch für "RAD Studio - C++Builder" in die Tool-Palette?

    D.h., du hast RAD Studio?

    Dann kannst du in den Projekten (in den Delphi-Projekten, wohlgemerkt!) in den Delphi-Compiler-Optionen unter "Erzeugung der C/C++-Ausgabedatei" "Alle C++Builder-Dateien erzeugen" auswählen. Ggf. mußt du den Package-Cache leeren, damit die Komponenten sichtbar werden.

    Wenn es so funktioniert, dann gut, aber du bist gewarnt - ich habe die oben zitierten Probleme nicht erfunden.



  • Ja ich habe das "RAD Studio 2009" Danke für den Hinweis mit der Compiler-Einstellung.

    Wenn ich in "Delphi-Compiler -> Linken -> Linker-Ausgabe: Alle C++Builder-Dateien erzeugen(auch Package-Libs)" aktiviere, habe ich leider wieder obig geschildertes Problem mit:

    [DCC Fehler] Schwerwiegender Fehler (Ausnahme von HRESULT: 0x8000FFFF (E_UNEXPECTED))
    

    Bei der "Spline.pas" stürzt er immer ab und die "Spline.hpp" ist beschädigt. Compilieren für Delphi geht anstandslos.



  • Tja - wenn du die Expertise hast, kannst du natürlich auf Fehlersuche im Delphi-Compiler gehen und im Quelltext Workarounds einfügen. Oder du findest dich damit ab, daß es nicht direkt geht, und machst dich daran, in der Weise wie oben von beschrieben eine Delphi-Wrapper-Komponente zu schreiben. (Das hält übrigens auch die Compilierzeiten für C++ gering.)



  • Schade das niemand GLScene für RAD Studio zu laufen hat. Ich habe leider keine Ahnung warum er die "spline.pas" nicht compilieren will und regelrecht abstürzt. Ein grober Blick in die Quelltextdatei hat jedenfalls nichts auffälliges gezeigt.

    Hat jemand zufällig "RAD Studio XE2" und dort mal ausprobiert? Vielleicht ist das dort im Compiler ja berichtigt.



  • Wenn man in der Spline.pas die Zeile

    TCubicSplineMatrix = array of array[0..3] of Single;
    

    ändert in:

    TCubicSplineMatrix = array of array of Single;
    

    Dann compiliert er das Projekt fehlerfrei. Ich kenne mich mit Delphi zu wenig aus. Hat das in der Form Nachteile? Kann man es anders lösen? Laut dem was ich über Delphi gefunden habe, wäre der obige Syntax korrekt. Warum haut hier der Compiler aber nun eine Fehlermeldung raus? 😕



  • Man kann den Compiler hier austricksen, indem man dies so umschreibt:

    TCubicSplineMatrixEx = array[0..3] of Single;
    TCubicSplineMatrix = array of TCubicSplineMatrixEx;
    

    Jetzt sagt er leider noch:

    [DCC Warnung] GLSelection.pas(299): W1025 Sprach-Feature wird nicht unterstützt: 'abstract class method'

    Gibt es da ein Setting das ich vergessen habe? Sollte bzw. kann man die Fehlermeldung eventuell irgendwie einfach ignorieren? Muss ich in der Delphi-Source was umschreiben?



  • KarlFritz schrieb:

    TCubicSplineMatrix = array of array[0..3] of Single;
    

    Entspricht DynamicArray<StaticArray<Single,3> > in C++.

    KarlFritz schrieb:

    TCubicSplineMatrix = array of array of Single;
    

    Entspricht DynamicArray<DynamicArray<Single> > .

    KarlFritz schrieb:

    Dann compiliert er das Projekt fehlerfrei.

    Und aller Delphi-Code, der MyCubicSplineMatrix[1][2] := 4.2; schreibt, erzeugt eine Zugriffsverletzung, weil das innere dynamische Array standardmäßig leer ist (im Debugmodus bekommst du immerhin Range-Checks).

    KarlFritz schrieb:

    Warum haut hier der Compiler aber nun eine Fehlermeldung raus? 😕

    Was für eine jetzt? Du sagst doch, es compiliert fehlerfrei, oder was?

    Ich will niemanden daran hindern, mit dem Kopf an die Wand zu rennen. Die Wand bleibt vermutlich stärker 😉 und ich habe oben schon geschrieben, wie man die Probleme umgehen kann. Aber bitte, rennt euch die Schädel ein 🙂



  • Ich meinte das so...
    Der Compiler crasht, wenn er in "spline.pas" diese Zeile compilieren sollte:

    TCubicSplineMatrix = array of array[0..3] of Single;
    

    Aber nur wenn er die C++Builder Libs etc mit compilieren soll. Delphi allein hat damit keine Probleme.

    Ich habe dann ein Workaround eingesetzt, damit der Compiler anstandslos die "spline.pas" compiliert:

    TCubicSplineMatrixEx = array[0..3] of Single;
    TCubicSplineMatrix = array of TCubicSplineMatrixEx;
    

    Wenn ich jetzt das Projekt "installiere", dann compiliert er es komplett und zeigt mir Package "GLScene_DESIGNTime2009.bpl wurde installiert." als Messagebox mit vielen Komponenten. Zusätzlich zeigt er noch Warnungen bezüglich:

    [DCC Warnung] GLSelection.pas(299): W1025 Sprach-Feature wird nicht unterstützt: 'abstract class method'

    Wenn ich jetzt eine C++Builder VCL Anwendung starte, kann ich sogar endlich GLScene Komponenten auswählen.

    Wenn ich jetzt aber mein Test-Projekt compiliere, dann erhalte ich sehr seltsame Fehlermeldungen:

    [BCC32 Fehler] Glcrossplatform.hpp(156): E2293 ) erwartet
    // Zeile 156: extern PACKAGE Graphics::TColor __fastcall RGB(const System::Byte r, const System::Byte g, const System::Byte b);
    
    [BCC32 Fehler] Vectorgeometry.hpp(25): E2316 'PSingle' ist kein Element von 'System'
    // Zeile 25: typedef System::PSingle PFloat;
    
    [BCC32 Fehler] Vectorgeometry.hpp(378): E2356 Redeklaration von '_fastcall VectorAdd(const float *,const float *)' mit anderem Typ
    // Zeile 378: extern PACKAGE Vectortypes::TVector4f __fastcall VectorAdd(float const *v1, float const *v2)/* overload */;
    

    und so weiter....

    Also die Mauer bröckelt schon etwas... 😉



  • KarlFritz schrieb:

    Wenn ich jetzt aber mein Test-Projekt compiliere, dann erhalte ich sehr seltsame Fehlermeldungen:

    Herzlichen Glückwunsch, du bist da angekommen, wo ich nach kurzer Prüfung meiner Optionen aufgegeben habe. Siehe mein erstes Posting im Thread.


Log in to reply