8

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

4

1 回答 1

22

如果您想在 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
于 2013-06-06T02:44:12.813 回答