You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Dart FFI实现原生代码对Dart类的访问?

Dart FFI 替代JNI对象交互方案咨询

我正在从Android/JNI迁移至Flutter/Dart/FFI构建原生应用。此前在Android中,我有一个会在程序生命周期内被修改的Java类ScanningHelper.java,在原生初始化时传入jobject类型对象,即可在C/C++代码中调用其成员函数或直接访问变量(取决于访问权限)。

请问Dart FFI是否支持类似操作?目前我想到的方案是在原生层创建结构体,通过多个函数完成数据读写,但这会产生大量代码,还需处理每次返回string/const char*时Dart端的内存清理工作。

希望能获得无需在两种语言中重复实现的方案指引,例如类似以下JNI中的实现方式:

// ScanningHelper.java
public class ScanningHelper {

   private String _mediaStorageDirectory;

   public void setMediaStorageDirectory(String path) { _mediaStorageDirectory = path; }
   public String getAppMediaStorageDirectory() { return _mediaStorageDirectory; }
   public double latitude;
   public double longitude;

   ...
   
   byte[] image1Bytes;

}

我定义了如getStringFromObjectMethod这类可跨类和返回类型复用的标准方法:

// JNIMethods.cpp
std::string mediaDirectory = JNIMethods::getStringFromObjectMethod(jniEnv,_scanningHelper,"getAppMediaStorageDirectory"));

内容的提问来源于stack exchange,提问作者banerjk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:50:17