Управление типом ссылки в файле 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, чтобы получить правильный результат?


person geoffjay    schedule 29.06.2016    source источник


Ответы (2)


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

person apmasell    schedule 29.06.2016

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

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

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

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

person arteymix    schedule 30.06.2016
comment
Хм, я искал это на github перед запуском и ничего не нашел. Я бы определенно не начал его, если бы увидел. Спасибо. - person geoffjay; 12.07.2016