#dart #ffi #dart-ffi
Вопрос:
У меня есть такая функция в C
:
char* getString() {
return "SOME_STRING";
}
теперь я хочу вызвать его с помощью FFI
in dart
, и это мой код:
import 'dart:io';
import 'dart:ffi';
void main(List<String> arguments) {
print('${getString()}');
}
final DynamicLibrary nativeAppTokenLib = Platform.isAndroid
? DynamicLibrary.open('lib_native_get_string.so')
: DynamicLibrary.process();
final String Function() getString = nativeAppTokenLib
.lookup<NativeFunction<HERE!!! Function()>>('getString')
.asFunction();
Интересно, что я должен поставить вместо HERE!!!
родного типа?
Ответ №1:
Попробуй:
import 'dart:ffi';
import 'dart:io';
import "package:ffi/ffi.dart";
...
final Pointer<Utf8> Function() _getString = nativeAppTokenLib
.lookup<NativeFunction<Pointer<Utf8> Function()>>('getString')
.asFunction();
String getString() => _getString().toDartString();
При этом package:ffi
Utf8
для представления символов используется тип «s». Метод расширения toDartString on Pointer<Utf8>
предназначен для преобразования их в строку.