Vala GUI и логика в переполнении стека

У меня есть программа для рисования, которая использует SDL, написанные на C ++. Я хотел бы создать графический интерфейс только в Vala и использовать его для вызова функций из программы (функции готовы к использованию, и я хочу вызывать их только из графического интерфейса). Я искал решения как VAPI, и я думал об использовании GObject, но я не могу принять оба. Кто-нибудь делал подобные вещи, и можете ли вы предложить мне решение моей проблемы?

5

Решение

Если вы хотите использовать код C ++ в Vala, мы подготовим их должным образом. Вот пример.

Сначала вы должны сказать valac Компилятор, что функция определена где-то еще. Давайте использовать внешний директивы.

// ccodetest.vala
extern void cpp_test_function ();

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

Затем функции в C ++ должным образом связаны с объектными файлами, производными от C, мы объявляем их как внешний «С».

// cpplibrary.cpp
# include

using namespace std;

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

Когда мы будем готовы, мы можем скомпилировать код Vala в C. Мы получаем ccodetest.c,

valac -C ccodetest.vala

Теперь мы можем использовать gcc скомпилировать объектный файл. Мы получаем 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/

Файл C ++ компилируется следующим образом.

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

В конце мы связываем оба файла.

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

Программа работает следующим образом:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]