控制Vapi文件中的ref类型
Controlling the ref type in a Vapi file
我正在尝试编写一个 Vapi file for 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 应该包含什么才能产生正确的输出?
您可以将 msgpack_object
class 指定为 [SimpleType]
,它将按值而非引用进行复制。
如果你想通过使用和测试来回馈我,我已经为 MessagePack 编写了部分 VAPI。
https://github.com/valum-framework/vala-extra-vapis/blob/msgpack/msgpack.vapi
如前所述,您需要在 class 上使用 [SimpleType]
注释来让您的类型按值传递。
编辑:只需为绑定添加它,将它们保存在 nemequ/vala-extra-vapis 存储库中是一件好事。
我正在尝试编写一个 Vapi file for 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 应该包含什么才能产生正确的输出?
您可以将 msgpack_object
class 指定为 [SimpleType]
,它将按值而非引用进行复制。
如果你想通过使用和测试来回馈我,我已经为 MessagePack 编写了部分 VAPI。
https://github.com/valum-framework/vala-extra-vapis/blob/msgpack/msgpack.vapi
如前所述,您需要在 class 上使用 [SimpleType]
注释来让您的类型按值传递。
编辑:只需为绑定添加它,将它们保存在 nemequ/vala-extra-vapis 存储库中是一件好事。