dart - dart FFI 中 'Native Type' 的 'char*' 是什么?

标签 dart ffi dart-ffi

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

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

现在我想在 dart 中通过 FFI 调用它,这是我的代码:

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

关于dart - dart FFI 中 'Native Type' 的 'char*' 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68112531/

相关文章:

dart - 在 bool 表达式中使用=>运算符

android - Navigator.pop(context) 抛出异常

flutter - 用户不互动时采取行动

c - Haskell FFI/C MPFR 库包装问题

windows - 如何使用 dart ffi 将回调传递给 win32 函数?

dart - 调用对象字段作为 ListTile 属性

ffi - 具有固定字符串值的配置的 ReasonML 绑定(bind)函数

c - 关于包装和调用 C 函数

flutter - 编写平台特定代码与 dart :ffi code 之间的区别

c++ - 写 MethodChannel 桥和 Dart :ffi bridge to run c/c++ code to get the response? 有什么区别