Vala vapi 文件文档

2024-04-25

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

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

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

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

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

有存在的吗?我是否需要这些文件之一来调用现有的 C 代码?


是的,要调用 C 函数,您需要为其编写绑定。该过程描述于http://live.gnome.org/Vala/Tutorial#Binding_Libraries_with_VAPI_Files 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);
}

myfunc.h(以及与您的项目链接的 .c 中的相应实现)

#include <glib-object.h>
char* my_func_foo(int bar, GObject* o)

example.vala 可以是

using MyFunc;

void main() {
    baz = foo(42);
}

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vala vapi 文件文档 的相关文章

随机推荐