Vala документация файлов Вапи

Я хотел бы взломать на существующем Бойком базирующемся использовании проекта C Vala.

В основном то, что я делаю, в начале моего процесса сборки, с помощью valac для генерации.c и.h файлов из моих .vala файлов, и затем просто компилируя сгенерированные файлы путем я был бы любой.c или.h файл.

Это - вероятно, не лучший способ, но, кажется, работает хорошо по большей части.

Моя проблема состоит в том, что мне нелегко получать доступ к моему существующему коду C из моего кода Vala. Существует ли простой способ сделать это?

Я попытался писать свои собственные .vapi файлы (у меня не было удачи с инструментом, который шел с vala), но я не могу найти достойную документацию относительно того, как записать их.

Кто-либо существует? Мне нужен один из этих файлов для вызова существующего кода C?

11
задан Torkel Bjørnson-Langen 16 November 2016 в 18:09
поделиться

1 ответ

Да, чтобы вызвать функцию C, вам нужно написать для нее привязку. Процесс описан в http://live.gnome.org/Vala/Tutorial#Binding_Libraries_with_VAPI_Files, однако, это не относится непосредственно к пользовательским функциям или библиотекам, написанным без GObject. Вам, вероятно, понадобится помощь IRC-канала #vala, если у вас есть сложные привязки для библиотек, не относящихся к GObject.

Однако, чаще всего, мы используем простые vapi файлы для привязки некоторых autoconf define или некоторых функций, написанных на обычном 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, чтобы связать все вместе.

15
ответ дан 3 December 2019 в 07:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: