Mam program do rysowania, który używa SDL, napisany w C++. Chciałbym stworzyć interfejs graficzny tylko w Vala i używać go do wywoływania funkcji z programu (funkcje są gotowe do użycia i chcę je wywoływać tylko z GUI). Szukałem rozwiązań jako VAPI i myślałem o używaniu GObject, ale nie mogę objąć obu. Czy ktoś zrobił podobne rzeczy i czy możesz zaproponować mi rozwiązanie mojego problemu?Vala GUI i logika w C++
Odpowiedz
Jeśli chcesz użyć kodu C++ w Vala, przygotowujemy je poprawnie. Oto przykład. Najpierw musisz powiedzieć kompilatorowi valac
, że funkcja jest zdefiniowana gdzie indziej. Użyjmy dyrektywy extern.
// ccodetest.vala
extern void cpp_test_function();
void main() {
stdout.printf ("This is Vala code\n");
cpp_test_function();
}
Wtedy funkcje w C++ są odpowiednio połączone z plikami obiektów pochodzących z C, możemy zadeklarować je jako extern „C”.
// cpplibrary.cpp
# include
using namespace std;
extern "C" void cpp_test_function() {
cout << "This is a C + + code\n";
}
Kiedy jesteśmy więc gotowi, możemy skompilować kod Vala do C. Otrzymujemy ccodetest.c
.
valac -C ccodetest.vala
Teraz możemy użyć gcc
skompilować plik obiektowy. Otrzymujemy 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/
pliku C++ skompilować w następujący sposób.
g++ -o cpplibrary.cpp.o cpplibrary.cpp -c
Na koniec łączący oba pliki.
g++ -o ccode_test ccodetest.o cpplibrary.cpp.o -L /usr/lib/ -lglib-2.0 -lgobject-2.0
Program działa następująco:
$ ./ccode_test
This is Vala code
This is a C++ code
- 1. oddzielna logika i GUI w java
- 2. Jak korzystać z Qt GUI z Vala?
- 3. Właściwość Objective-C i logika syntezy
- 4. Czy produkcja Vala i Genie jest gotowa?
- 5. Ogólna funkcja w Vala
- 6. Zarządzanie pamięcią Vala
- 7. Logika w Disk Defragmantation i Disk Check
- 8. Mediator C++ GUI sample
- 9. Vala (język podobny do C#) kompiluje się do C?
- 10. Logika logiczna (kolejność operacji) A i B lub C
- 11. Logika i matematyka orientacji obiektu
- 12. Kompilacja źródło Vala W Windows
- 13. Logowanie z Vala
- 14. Vala dla wtyczek pidgin
- 15. Jak używać atrybutów CCode w Vala?
- 16. GUI z C++? lub C# i Java do zrobienia?
- 17. Czy mogę kodować na iPhone'a w Vala?
- 18. Czy język vala to krzyżowy?
- 19. Vala dla Androida?
- 20. Ile zoptymalizowany jest Vala generowany kod C przez ręcznie napisany kod C?
- 21. Jak utworzyć interaktywny (przeciągnij i upuść) GUI w języku C#
- 22. Zaawansowana logika szablonowa Django
- 23. jak zablokować GUI aplikacji w C# Winform
- 24. Automatyczne testowanie aplikacji C/C++ GUI
- 25. Najlepsza zmiana rozmiaru i/lub logika zbiorów
- 26. Alternatywna składnia dla C++, a la Genie for Vala?
- 27. Logika programowania obiektowego
- 28. Logika aplikacji do fakturowania i subskrypcji?
- 29. Logika gry Libgdx w Renderowanie?
- 30. Dowolne przykłady tworzenia usługi Windows w C/C++? (Brak GUI)
Co sprawia, że myślisz, że nie może związać API gobject opartego o interfejsie VAPI? * Większość * dostępnych VAPI właśnie to robi ... – nemequ
Próbowałem skompilować kod Vala do C, a następnie utworzyć plik obiektowy. Stworzyłem plik obiektowy z kodu C++. Następnie spróbowałem połączyć dwa pliki za pomocą '-lglib' i' -lgobject' w g ++. Niestety, łączenie obiektu z kodu Vala z funkcją napisaną w C++ zwraca błąd. – Ocelpers
Czy mógłbyś wysłać tutaj błąd? – MrEricSir