Builder C++ XE6 und Qt



  • Ich muss mit einem anderen Programm, das in Qt geschrieben wurde, kommunizieren. Mein geschriebenes Programm wurde mit dem C++ Builder XE6 erstellt. Nach dem einbinden der Bibliotheken mit $(QTDIR)\include und der notwendigen cpp-Dateien der in Qt geschriebenen Anwendung, erhalte ich folgenden Fehler:

    [bcc32 Fataler Fehler] qatomic_x86.h(417): F1003 error-Direktive: "This compiler for x86 is not supported"
    

    Wenn ich Zeilen wie „#if defined(Q_CC_GNU)“ rausnehme erhalte ich jede Menge Fehlermeldungen.
    Ist prinzipiell eine Kommunikation mit QT-Programmen möglich?



  • Prinzpiell: ja

    Wichtige Hinweise findest du hier..



  • leider funktioniert die Suchfunktion in diesem Forum nicht mehr so gut, so dass die Möglichkeiten beschränkt sind. Die google-Suche habe ich auch bereits genutzt, konnte aber dort keine Lösung auf mein Problem finden. Daher wende ich mich an dieses Forum.



    1. Inhalt der verlinkten Website lesen
    2. verstanden?
      nein -> zurück zu 1
      ja -> weiter bei 3
    3. Frage formulieren


  • kann ich einen anderen Compiler in XE6 auswählen? Ich habe in den Projekteinstellungen unter Sprachkonvention auch GNU gefunden. Den Fehler erhalte ich auch bei anderen Einstellungen. Welche Projekteinstellungen muss ich festlegen um in qt erstellte cpp-Dateien zu verwenden?

    Hintergrund:
    Ich habe mit QT gar keine Erfahrungen. Ich habe QT installiert, die Umgebungsvariablen in Windows für QT gesetzt (QTDIR), Wert: C:\Qt\Qt5.1.1\5.1.1\msvc2010 und dort die Path Variable angepasst: C:\QT\Qt5.1.1\5.1.1\msvc2010\bin (für dlls)

    Anschließend hab ich ein neues Projekt angelegt und die in Qt erstellte cpp dem Projekt hinzugefügt. In der cpp-Datei befindet sich ein Klasse, die ich in meinem Projekt verwenden will. Die cpp-Datei und Header befinden sich im Projektordner.

    In den Projekteinstellungen habe ich die Qt-Bibliothek$(QTDIR)\include unter Bibliothekspfad eingefügt.

    Wenn ich dann starte erhalte ich den oben genannten Fehler in der "qatomic_x85.h"



  • Ich hoffe, DocShoe verübelt es mir nicht, wenn ich deinen Lernprozeß etwas abkürze.

    Du sagst, du müßtest "mit einem anderen Programm, das in Qt geschrieben wurde, kommunizieren". Was heißt denn das? Da sind zwei Programme, die unabhängig voneinander erstellt wurden, aber parallel laufen und dann Daten austauschen? Oder willst du ein VCL-Formular in eine Qt-Anwendung integrieren, oder umgekehrt? Oder was ganz anderes? Das wäre schon wichtig zu wissen, weil überhaupt nicht klar ist, wie das, was du gerade zu tun versuchst (nämlich mit einem Schraubenzieher einen Nagel einzuschlagen), überhaupt mit deinen Anforderungen zusammenhängt.

    Zum Erstellen von Anwendungen mit Qt ist der C++Builder das falsche Werkzeug. Da nimmt man Visual C++ oder den Qt Creator. Das ziellose Rumprobieren an den Compiler- und IDE-Einstellungen des C++Builder würde ich einstweilen unterlassen, denn das kostet nur Zeit und wird dich nirgendwohin bringen.

    Anhand deiner Fragen kann ich das gerne etwas präzisieren:

    rudpower schrieb:

    kann ich einen anderen Compiler in XE6 auswählen?

    Nein. C++Builder verwendet für Windows den BCC für 32-Bit-Targets und eine angepaßte Version von Clang für 64-Bit-Targets. Andere Compiler wie der GCC oder Visual C++ werden nicht unterstützt.

    rudpower schrieb:

    Ich habe in den Projekteinstellungen unter Sprachkonvention auch GNU gefunden.

    Da schaust du doch am besten mal in der Hilfe nach, was der Switch macht, und ob dir das wohl helfen wird.

    rudpower schrieb:

    Den Fehler erhalte ich auch bei anderen Einstellungen. Welche Projekteinstellungen muss ich festlegen um in qt erstellte cpp-Dateien zu verwenden?

    Die Frage ist müßig, denn der C++Builder bietet keine Unterstützung für Qt. Du kannst Qt-Programme nicht mit dem C++Builder kompilieren.



  • Sry für die unverständliche Frage und vielen Dank für das Verständnis.

    Genau, es handelt sich um 2 Programme, die unabhängig voneinander erstellt wurden. Beide laufen parallel (z.Z. noch lokal auf einem Rechner) und sollen Daten austauschen (über Server-Client).

    Das eine ist eine Software die Messungen ausführt (C++ Builder) und das andere ist eine Software, die die Messwerte auswerten soll (in Qt).

    Die Klassen für die Netzwerkkommunikation sind bereits in Qt bzw. MS Visual C++ geschrieben. Das MS-Projekt kann ich natürlich nicht öffnen.

    Es gibt eine cpp-Datei mit der main-Methode wo ein Client-Objekt erzeugt wird, das für die Netzwerkkommunikation zuständig ist:

    #include "MeasureClient.h"
    
    #include <qtwidgets/qapplication.h>
    #include <qtcore/qdatetime.h>
    
    using namespace std;
    int main(int argc, char *argv[])
    {
    
        QApplication app(argc, argv);
        MeasureClient server;
        server.show();
        return app.exec();
    }
    

    Diese Datei "MeasureClient.h" hab ich meinem C++Builder-Projekt hinzugefügt und das objekt server erzeugt.

    Dann kommt die Fehlermeldung

    [bcc32 Fataler Fehler] qatomic_x86.h(417): F1003 error-Direktive: "This compiler for x86 is not supported"
    

    in der Header-Datei "qatomic_x85.h"

    Dann sollte sich ein Fenster öffnen, das eine IP und den Server port abfragt. Der Datenaustausch erfolgt dann über Nachrichten bei dem über get- und set-Methoden die angelegte Datenstruktur verwendet wird.



  • rudpower schrieb:

    Genau, es handelt sich um 2 Programme, die unabhängig voneinander erstellt wurden. Beide laufen parallel (z.Z. noch lokal auf einem Rechner) und sollen Daten austauschen (über Server-Client).

    Aha. Das ist doch schon viel präziser.

    rudpower schrieb:

    Dann kommt die Fehlermeldung

    [bcc32 Fataler Fehler] qatomic_x86.h(417): F1003 error-Direktive: "This compiler for x86 is not supported"
    

    in der Header-Datei "qatomic_x85.h"

    Nach meinen Ausführungen oben ist dir hoffentlich klar, was das bedeutet, oder?

    rudpower schrieb:

    Die Klassen für die Netzwerkkommunikation sind bereits in Qt bzw. MS Visual C++ geschrieben.

    Das ist natürlich nicht so schlau, wenn sie auch außerhalb von Qt verwendet werden sollen.

    Um die Netzwerk-Klassen so zu schreiben, daß sie sowohl von C++Builder als auch von VC++ kompiliert werden können, mußt du eine Bibliothek verwenden, die mit beiden Compilern funktioniert. Dieser Liste zufolge sollte Boost.Asio mit dem BCC halbwegs funktionieren. Allerdings erfordert Boost im C++Builder öfter mal lustige Workarounds. Aber es gibt ja auch zahlreiche Alternativen zu Boost.Asio.

    Alternativ kannst du für die Kommunikation einen etablierten Standard verwenden, z.B. DCOM oder SOAP; für die hat der C++Builder bequeme Unterstützung.



  • Die von Embarcadero mitgelieferte Boost funktioniert im Allgemeinen.
    Wenn man also nicht die allerneueste Version benötigt und das was man verwenden möchte in der gelieferten Version vorhanden ist, dann sollte das auch funktionieren.
    boost::asio ist beim XE6 dabei und sollte also funktionieren.

    QT ist ja schön und gut,aber ich habe immer Bauchschmerzen Funktionen zu verwenden für die es "portablere" Alternativen gibt. Wieso braucht ein GUI-Framework Sockets, Datenbankkomponenten, etc.

    Unsere Projekte bestehen immer aus einem "Fachkonzept" in dem nur STL und Boost erlaubt sind und dem GUI wo im Fall C++ Builder die VCL verwendet wird.


Log in to reply