我们正在制作一个使用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)
}