#c #kotlin #pointers #avro #kotlin-native
Вопрос:
Мы создаем мультиплатформенное приложение kotlin с использованием Avro. Avro java используется для Android, и планируется использовать Avro C для iOS. У нас есть Avro C, интегрированный в приложение kotlin, но у нас возникли проблемы с функциями c-взаимодействия. Я думаю, что это как-то связано с тем, как мы передаем наши исходящие переменные (ссылки).
Код Котлина:
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 равны нулю. Я предполагаю, что это как-то связано с взаимодействием, возможно, мы не передаем их неправильно.
Вот avro_schema_from_json_t
исходный код функции.
А это документация Avro C.
Ответ №1:
Из 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)
}