Нашел рабочее решение. Я сделал ошибку и подумал, что у меня неправильное выделение указателя, поэтому я скопировал то, что ide считал правильным. что привело к распределению вроде:
var avar:COpaquePointerVar = alloc()
теперь Kotlin native все размещает правильно. но чистое распределение редко решает проблему, поэтому вот код:
/* C Code */
void* adapter;
int ret;
ret = gattlib_adapter_open(NULL, &adapter);
if (ret) {
fprintf(stderr, "ERROR: Failed to open adapter.\n");
return 1;
}
ret = gattlib_adapter_scan_enable(adapter, ble_discovered_device, 5, NULL /* user_data */);
if (ret) {
fprintf(stderr, "ERROR: Failed to scan.\n");
}
gattlib_adapter_scan_disable(adapter);
puts("Scan completed");
после того, как я заметил свою ошибку, я снова прочитал весь свой код и создал рабочий пример на c. Я переместил код по частям с c на kotlin native. так что версия kotlin прошла несколько этапов и закончилась:
/* Kotlin with native interop */
memScoped {
var avar: COpaquePointerVar = alloc()
var ret = gattlib_adapter_open(null, avar.ptr)
print("Adapter opened\n")
if (ret > 0) {
print( "ERROR: Failed to open adapter.\n");
return
}
print("start scan\n")
gattlib_adapter_scan_enable(avar.value, staticCFunction { a, b, c, d ->
kotlin.native.initRuntimeIfNeeded()
print("found dev\n")
}, 5, NULL /* user_data */);
gattlib_adapter_scan_disable(avar.value)
print("Scan completed\n");
}
Я студент, так что это может быть не лучшая практика, не стесняйтесь поправлять меня в любой момент. Я надеюсь, что этот фрагмент поможет всем, кто только начал работать с kotlin native.
person
Basur
schedule
06.04.2020