Vala vapi文件文档

Jor*_*dan 11 c glib vala vapi

我想使用Vala破解现有的基于GLib的C项目.

基本上我正在做的是,在我的构建过程开始时,使用valac从我的.vala文件生成.c和.h文件,然后按照我任何.c或.h文件的方式编译生成的文件.

这可能不是最好的方式,但似乎在大多数情况下工作正常.

我的问题是我很难从Vala代码访问现有的C代码.是否有捷径可寻?

我已经尝试编写自己的.vapi文件(我对vala附带的工具没有任何好运),但我找不到任何关于如何编写这些文件的体面文档.

有没有?我是否需要其中一个文件来调用现有的C代码?

elm*_*rco 15

是的,要调用C函数,您需要为它编写绑定.该过程在http://live.gnome.org/Vala/Tutorial#Binding_Libraries_with_VAPI_Files中描述,但是,这不直接应用于没有GObject编写的自定义函数或库.如果你有非GObject库的复杂绑定,你可能需要#vala IRC频道的帮助.

但是,大多数情况下,我们使用简单的vapi文件绑定一些autoconf定义或一些用简单C编写的函数,出于效率原因或破坏的vala,或者其他任何原因.这是大多数人的做法:

myfunc.vapi

[CCode (cheader_filename = "myfunc.h")]
namespace MyFunc {
    [CCode (cname = "my_func_foo")]
    public string foo (int bar, Object? o = null);
}
Run Code Online (Sandbox Code Playgroud)

myfunc.h(与.c链接的相应实现)

#include <glib-object.h>
char* my_func_foo(int bar, GObject* o)
Run Code Online (Sandbox Code Playgroud)

example.vala可能是

using MyFunc;

void main() {
    baz = foo(42);
}
Run Code Online (Sandbox Code Playgroud)

使用valac进行编译时,请使用myfunc.vapi --vapidir=的目录位置.根据您的构建系统,您可能需要将额外的参数传递给valac或gcc CFLAGS,以便将所有内容链接在一起.