Crystal C绑定:参数const unsigned char **

时间:2016-12-17 11:16:48

标签: crystal-lang

这是我正在尝试使用的C函数的签名(它生成二进制数据数组):

long get_output( const unsigned char ** );

我用它来映射:

fun output = get_output( UInt8** ): Int32

在C中使用它的工作示例:

const unsigned char * data;
get_output( &data );

但是在Crystal:

data = uninitialized UInt8
MyLib.output( pointerof( pointerof( data ) ) ) # ERR: pointerof of pointerof not allowed

1 个答案:

答案 0 :(得分:2)

这有效:

data = uninitialized UInt8*
MyLib.output(pointerof(data))

请注意,您拥有的参数为UInt8**,因此您需要声明UInt8*类型的变量。

然而,Crystal使用out关键字非常好地支持这个习惯用法:https://crystal-lang.org/docs/syntax_and_semantics/c_bindings/out.html

MyLib.output(out data)
# use data

这是最后一种方式,因为它更干,你不必重复这种类型。

另外要小心,通常很长时间映射到Int64。通常,LibC下有一些好的别名,例如LibC::CharLibC::Long等。