【问题标题】:Include C file in a dart/flutter project在 dart/flutter 项目中包含 C 文件
【发布时间】:2019-01-20 00:56:10
【问题描述】:

在使用DartFlutter 编写的跨平台(Android/iOS)项目中,我需要包含一个C 文件并从该文件调用C 函数。例如,许多最新的加密代码在 Dart 中还不存在。此外,我需要在有返回值的dart函数中调用C代码,所以我不能使用异步方法,而是需要同步调用这些函数。

thread about including C/C++ code in Flutter 似乎建议使用platform channels。有了这些,就可以使用各自平台的本机代码。对于 iOS,Objective C 是 C 的超集,而对于 Android,需要一个额外的层,即 NDK 才能使用 C 代码。这不仅意味着需要编写两次代码(我可以忍受),而且platform channels tutorial 明确表示平台调用是异步的(这对我来说很麻烦)。

我从 2012 年发现了另一个 thread about native extensions in Dart,它展示了如何在 dart 中包含 C 代码,但这似乎只针对命令行应用程序。

如果不存在从 Flutter 同步调用 C 函数的方法,那就太奇怪了。如果您知道如何实现这一点,您可以考虑一个简单的 C 函数作为概念证明,如下所示:

int inc(int num) {
    return num + 1; 
}

提前致谢!

【问题讨论】:

  • 您找到解决方案了吗?

标签: android ios dart flutter


【解决方案1】:

目前,您无法同步执行此操作。对不起,伤了你的心。

【讨论】:

  • 别担心,我的心没那么容易碎 :-) 我必须重写很多代码才能使其与异步函数一起使用。
【解决方案2】:

使用最新稳定版本的 Dart SDK(2.5.0 在撰写此答案时),可以在您的 dart/flutter 项目中包含一个 C 文件。

在 Dart Native 平台上运行的 Dart 移动、命令行和服务器应用程序可以使用 dart:ffi 库来调用原生 C API。 ffi名称代表外来函数接口。

截至目前,dart:ffi 仅作为预览功能发布,API 将来可能会遇到重大更改。

您可以查看快速入门指南 here 或查看 Github 上的 hello world sample

此外,我需要在具有返回值的 dart 函数中调用 C 代码

如果您想传递参数并获得一些值作为回报,请参阅this 示例。

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    相关资源
    最近更新 更多