我有一个使用C++编写的使用SDL的绘图程序。我只想在Vala中创建一个图形界面,并使用它来调用程序中的函数(函数可以使用,我只想从GUI调用它们)。我一直在寻找作为VAPI的解决方案,并且正在考虑使用GObject,但是我不能同时使用这两种方法。有没有人做过类似的事情,您能建议我解决我的问题吗?

最佳答案

如果要在Vala中使用C++代码,请正确准备它们。这是一个例子。

首先,您必须告诉valac编译器该函数在其他地方定义。让我们使用 extern 指令。

// ccodetest.vala
extern void cpp_test_function ();

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

然后,将C++中的函数与从C派生的目标文件正确链接,我们将它们声明为 extern“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

关于c++ - Vala GUI和C++中的逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16885242/

10-12 20:43