dart FFI 中“char*”的“本机类型”是什么?

问题描述

我在 C 中有一个这样的函数

char* getString() {
    return "SOME_STRING";
}

现在我想通过 FFI 中的 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!!! 作为原生类型?

解决方法

试试:

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:ffiUtf8 类型来表示字符。 Pointer<Utf8> 上的 toDartString 扩展方法是将它们转换为字符串的预期方法。