Frage Vala GUI und Logik in C ++


Ich habe ein Zeichenprogramm, das SDL verwendet, geschrieben in C ++. Ich möchte nur in Vala eine grafische Oberfläche erstellen und damit Funktionen aus einem Programm aufrufen (Funktionen sind sofort einsatzbereit und ich möchte sie nur über die GUI aufrufen). Ich suchte nach Lösungen wie VAPI, und ich dachte daran, GObject zu verwenden, aber ich kann beides nicht annehmen. Hat jemand ähnliche Dinge getan und können Sie mir eine Lösung für mein Problem vorschlagen?


5
2018-06-02 17:14


Ursprung


Antworten:


Wenn Sie den C ++ Code in Vala verwenden möchten, bereiten wir sie richtig vor. Hier ist ein Beispiel.

Zuerst musst du das sagen valac Compiler, dass die Funktion woanders definiert ist. Lass uns das benutzen extern Richtlinie.

// ccodetest.vala
extern void cpp_test_function ();

void main () {
    stdout.printf ("This is Vala code\n");
    cpp_test_function ();
}

Dann sind die Funktionen in C ++ korrekt mit den von C abgeleiteten Objektdateien verknüpft, wir deklarieren sie als extern "C".

// cpplibrary.cpp
# include

using namespace std;

extern "C" void cpp_test_function () {
    cout << "This is a C + + code\n";
}

Wenn wir so bereit sind, können wir Vala-Code zu C kompilieren. Wir bekommen ccodetest.c.

valac -C ccodetest.vala

Jetzt können wir verwenden gcc um die Objektdatei zu kompilieren. Wir bekommen ccodetest.o.

gcc-o ccodetest.o ccodetest.c-c-I /usr/include/glib-2.0/ -I /usr/include/glib-2.0/glib/ -I /usr/lib/glib-2.0/include/

Datei C ++ kompilieren Sie wie folgt.

g++ -o cpplibrary.cpp.o cpplibrary.cpp -c

Am Ende verbinden wir beide Dateien.

g++ -o ccode_test ccodetest.o cpplibrary.cpp.o -L /usr/lib/ -lglib-2.0 -lgobject-2.0

Das Programm funktioniert wie folgt:

$ ./ccode_test
This is Vala code
This is a C++ code

14
2018-06-06 02:44