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