Управление типом ссылки в файле 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.