在Avro c中使用Kotlin c-interop的问题



我们正在制作一个使用Avro的kotlin多平台应用程序。Avro java用于android,计划将Avro C用于iOS。我们已经将Avro C集成到kotlin应用程序中,但是我们在C -互操作功能方面遇到了问题。我认为这与我们传递out变量(引用)的方式有关。

芬兰湾的科特林代码:

var json: String =
"{"
"  "type": "record","
"  "name": "list","
"  "fields": ["
"    { "name": "x", "type": "int" },"
"    { "name": "y", "type": "int" },"
"    { "name": "next", "type": ["null","list"]}"
"  ]"
"}";
var avro_c_schema: avro_schema_t? = null
var error: avro_schema_error_t? = null
var resultInt = avro_schema_from_json(json, json.length, cValuesOf(avro_c_schema), cValuesOf(error))

c函数返回0,这意味着没有任何错误,但引用变量avro_c_schema和error为null。我猜这与互操作有关,也许我们没有错误地传递它们。

avro_schema_from_json_t函数源代码

这是Avro C文档

摘自cValuesOf文档:

返回不可变值CValues序列,传递给C代码。

所以我不认为正确的方法在你的情况下。试试这个:

memScoped {
val avro_c_schema = alloc<avro_schema_t>()
val error = alloc<avro_schema_error_t>()
var resultInt = avro_schema_from_json(json, json.length, avro_c_schema.ptr, error.ptr)
}

最新更新