2016-06-29 21 views
1

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

void msgpack_object_print(FILE* out, msgpack_object o); 

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

[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] и он будет скопирован по значению, а не по ссылке.

1

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

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

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

EDIT: Просто добавив, что для привязок, это хорошая вещь, чтобы держать их в репозитории nemequ/vala-extra-vapis.

+0

Хм, я ищу github для этого перед запуском и подошел пустой. Я бы определенно не начал, если бы увидел это. Благодарю. – geoffjay