我有一个使用SDL的绘图程序,用C++编写.我想只在Vala中创建一个图形界面,并用它来调用程序中的函数(函数可以使用,我只想从GUI调用它们).我一直在寻找VAPI的解决方案,而我正在考虑使用GObject,但我无法接受这两种解决方案.有没有人做过类似的事情,你能建议我解决我的问题吗?
Oce*_*ers 18
如果您想在Vala中使用C++代码,我们可以正确地准备它们.这是一个例子.
首先,您必须告诉valac
编译器该函数是在其他地方定义的.我们使用extern指令.
// ccodetest.vala
extern void cpp_test_function ();
void main () {
stdout.printf ("This is Vala code\n");
cpp_test_function ();
}
Run Code Online (Sandbox Code Playgroud)
然后C++中的函数与从C派生的目标文件正确链接,我们将它们声明为extern"C".
// cpplibrary.cpp
# include
using namespace std;
extern "C" void cpp_test_function () {
cout << "This is a C + + code\n";
}
Run Code Online (Sandbox Code Playgroud)
当我们准备好时,我们可以将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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1756 次 |
最近记录: |