Никак не могу правильно обернуть функцию в vapi. Функция из libmpv/client.h:
int mpv_get_property(mpv_handle *ctx, const char *name, mpv_format format, void *data);
Для базовых типов, работает
//mpv.vapi
[CCode (cname = "mpv_get_property", simple_generics = true, has_target = false)]
public Mpv.Error get_property_double (string name, Mpv.Format format, out double data);
//code
double pos;
Mpv.Error = er;
er = ctx.get_property_double ("time-pos", Mpv.Format.DOUBLE, out pos);
генерирует правильный код на C:
gdouble pos = 0.0;
enum mpv_error er;
er = mpv_get_property (self->priv->ctx, "time-pos", MPV_FORMAT_DOUBLE, &pos);
А для структуры не работает:
//vapi
[Compact]
[CCode (cname = "struct mpv_node")]
public class Node {
///////
}
[CCode (cname = "mpv_get_property", simple_generics = true, has_target = false)]
public Mpv.Error get_property_node (string name, Mpv.Format format, out Mpv.Node data);
//code
Mpv.Node node;
Mpv.Error = er;
er = ctx.get_property_node ("metadata", Mpv.Format.NODE, out node);
Проблема в том, что Vala генерирует в С переменную структуры как указатель:
struct mpv_node* node = NULL;
enum mpv_error er;
er = mpv_get_property (self->priv->ctx, "metadata", MPV_FORMAT_NODE, &node);
mpv_node node;
и передача адреса в функцию , а не адреса указателя mpv_node* node = NULL;
Как можно решить этот вопрос?