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,以便将所有内容链接在一起.