2

我正在尝试为 MessagePack 编写一个 Vapi 文件并且遇到了几个问题,首先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 应该包含什么才能产生正确的输出?

4

2 回答 2

3

您可以将您的msgpack_object类指定为[SimpleType],它将按值而不是按引用进行复制。

于 2016-06-29T20:49:32.753 回答
2

如果您想通过使用和测试来回馈,我已经为 MessagePack 编写了部分 VAPI。

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

就像已经说过的,您需要使用[SimpleType]类上的注释来让您的类型按值传递。

编辑:只需为绑定添加它,将它们保存在nemequ/vala-extra-vapis存储库中是一件好事。

于 2016-06-30T13:16:37.840 回答