Управление типом ссылки в файле Vapi

Я пытаюсь написать файл Vapi для MessagePack, и у меня возникла пара проблем, во-первых, в результате msgpack_object_print неверно из-за типа ссылки одного из параметров. Заголовочный файл ожидает

void msgpack_object_print(FILE* out, msgpack_object o);

и мой файл Vapi содержит

[CCode (instance_pos = 1.1)]
public void print (Posix.FILE out);

который генерирует вывод C

msgpack_object_print (_tmp13_, &obj);

где obj это тип msgpack_object *, Это создает ошибку

examples/simple.c:173:34: error: incompatible type for argument 2 of ‘msgpack_object_print’

и он исчезнет, ​​если я удалю & из сгенерированного C. Итак, мне интересно, что мой Vapi должен содержать, чтобы привести к правильному выводу?

2 ответа

Решение

Вы можете обозначить свой msgpack_object класс как [SimpleType] и он будет скопирован по значению, а не по ссылке.

Я написал частичный VAPI для MessagePack, если вы хотите внести свой вклад, используя и тестируя его.

https://github.com/valum-framework/vala-extra-vapis/blob/msgpack/msgpack.vapi

Как уже говорилось, вам нужно использовать [SimpleType] аннотации к классу, чтобы ваш тип передавался по значению.

РЕДАКТИРОВАТЬ: Просто добавив это для привязок, это хорошо, чтобы сохранить их в https://github.com/nemequ/vala-extra-vapis.

Другие вопросы по тегам