问题标签 [dart-ffi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1836 浏览

flutter - 颤振/飞镖:如何在飞镖 FFI 中使用异步回调?

我的应用程序的后端是用 C++ 编写的,前端是用 Dart/flutter 编写的。每当数据准备好时,我希望后端通知前端。这需要在 Dart 和 C++ 之间实现异步回调方案。

环境

我做了什么

我查看了 Dart 团队的 github 示例

为了使示例代码适应颤振项目,我做了以下

  • 创建 FFI 插件项目
  • 用示例函数替换main函数
  • 删除不重要的依赖项,例如expect
  • 使用引用的 C++ 代码创建本机库,例如dart-sdk-master/runtime/bin/ffi_test/ffi_test_functions.cc

问题

但是,我无法运行示例。

飞镖版

我遇到的第一个问题是直接运行示例时不支持 dart 版本。我在最新的稳定频道,也尝试过开发频道。错误说

本机编译

示例中缺少有关本机端实现的信息。所以我留下了很多编译器错误。

问题

无法从 Dart 团队获得答案,我有几个问题

  • 我应该从源代码构建 Dart 运行时以使异步回调工作吗?上面的错误似乎表明我缺少运行时支持。这是否意味着官方 dart/flutter 版本中不包含 FFI 异步回调?
  • 某处是否有准备运行的 ffi 异步回调示例或文档?

恐怕有了这么少的信息,很难通过跟踪和错误来弄清楚。

0 投票
1 回答
820 浏览

linux - linux上的Dart / Flutter ffi - 配置CMake的问题

我目前需要在我的 Flutter 项目中调用一个 C++ 函数,用于 Linux 桌面应用程序(使用 dart:ffi)。此页面https://flutter.dev/docs/development/platform-integration/c-interop#first-party-library没有解释如何在 Linux 上配置此类项目(Windows 也不适用)。

经过几次尝试,我无法正确链接 C++ 库。

C++ 函数

我将以下行添加到 CMakeLists.txt :

最后,我通过以下方式在 Dart 中链接:

它编译正常,但在启动时,程序返回以下错误:

我还尝试了动态链接(将库标记为SHAREDCMakeLists.txt 并将其与 链接DynamicLibrary.open("libmy_native.so"))。还尝试调用DynamicLibrary.process()CMake 行并将其放入第二个 CMakeLists.txt(linux/flutter 中的那个)。它永远不会找到符号。所以,我想我在这里遗漏了一些东西。任何帮助,将不胜感激。
此致

0 投票
1 回答
464 浏览

c++ - Dart ffi - 从 C++ 调用 Dart

我正在制作一个颤振应用程序,其中我的后端是 C++。当用户进入某个屏幕时,我通过 dart ffi 发出加载调用信号。我的问题是我在 C++ 中加载音频,但我想向 dart 发出加载已完成的信号,以便我可以停止显示加载屏幕。AFAIK,没有办法从 C++ 调用飞镖。我已经看到您可以使用 FromFunction。来源在这里

如何调用没有参数的 void 类方法?或如何从 C++ 调用飞镖代码?

Ps:我认为到目前为止这是不可能的(没有变通办法)。Dart 开发人员请添加此功能,因为能够调用 dart 来处理信息非常有用

0 投票
1 回答
368 浏览

c - 如何将 C 代码与 Dart 代码静态链接以使用 dart ffi 库启用 ffi

我正在尝试编写一个 dart 二进制应用程序并用它在 C 代码中链接。

我阅读了文档,并且了解如何在运行时执行实际的 ffi

但我不明白如何将我的 C 代码静态链接到构建过程,因为我不想分发二进制文件以及单独的共享库。

任何建议都会有所帮助,并在此先感谢

0 投票
0 回答
78 浏览

ios - IOS dylib 入口点

我们正在试验 Dart ffi(外部函数接口),并希望直接从 dart 调用 IOS AVFoundation dylib。

要使用 ffi,我们需要动态加载 AVFoundation dylib。

这些导致了几个问题。

  1. 我们如何找到 AVFoundation dylib 的路径?
  2. 我们如何获取/查找 dylib 的入口点列表?
  3. 我们是直接加载dylib还是需要通过框架加载它?
  4. 我们可能需要加载其他 dylib(用于核心功能),因此理想情况下,我们需要一种通用方法来识别 dylib 的路径及其入口点集。

我们在发布使用动态加载的 dylib 的应用程序时会遇到任何问题吗?我遇到了一些东西(我现在已经丢失了),这似乎表明应用程序商店可能不允许上传使用动态加载的应用程序。

我们正在考虑另一种方法,即创建一个小型 Objective-c 库,该库可以有效地代理来自 av Foundation 的调用,但是我们正在尝试避免使用任何 Objective-c/swift 代码。

0 投票
0 回答
111 浏览

dart - 显示详细的转储

嗨,我正在尝试使用 dart ffi,但我遇到了以下转储的问题

我不确定如何更好地输出究竟是什么导致了错误,因为它感觉有点神秘。

代码在这里崩溃

ffi胶水代码

所以,是的,我可以参考有关调查这些崩溃的任何资源吗?

##编辑##

该 api 是 rust wasmer 项目的 C 导出 api

导出的标题是

锈实施在

https://github.com/wasmerio/wasmer/blob/0a4a2c7d24d718e48eb9aa895292d3cbf950f7ed/lib/c-api/src/wasm_c_api/instance.rs#L178

更详细的代码

0 投票
1 回答
219 浏览

c - Dart ffi - 使用 C 从文件中读取表情符号

我正在保存一个使用 UTF-8 编码的文件,其中包含一些信息,包括来自 Dart 端的按钮的名称以及以下代码:

我用 C 读取同一个文件并使用 FFI 在 C 和 Dart 之间传递数据。

读取 C 保存的指针的 Dart 代码:

我的问题是这段代码可以处理 0 个错误,它甚至可以处理日文、俄文字符,但是当引入表情符号时,事情会变得很奇怪。当我保存一个包含表情符号的文件并尝试使用 C 和 Dart ffi 读取它时,我得到了Utf8.fromUtf8. 例如:

有时,它工作并呈现表情符号的代码相同,但后来应用程序随机崩溃。每次读取文件时抛出的异常似乎都不同,有时我没有异常,但后来崩溃了!这是不一致的。我不知道我做错了什么,我希望它可以与表情符号一起使用。谁能帮我解决这个问题?

0 投票
1 回答
71 浏览

dart - Dart _psapi 未找到

我正在尝试调用 WinAPI。我从docs复制过去的代码:

在此处输入图像描述

0 投票
1 回答
453 浏览

c++ - dart:ffi 中结构的数组成员

我想在我的颤振项目中使用 Bob Jenkins rng https://burtleburtle.net/bob/rand/isaacafa.html

这里我们有一个结构体,里面有 2 个静态缓冲区

现在在 dart:ffi 中,Struct 类只能有 int、double 和 Pointer 的成员,并进行适当的修饰。但是,我不能用给定的 NativeTypes 来描述这个结构。

因为ctx.result.asTypedList(256)崩溃。所以我所做的只是将结构中的数组更改为指针并以这种方式初始化:

这可以通过asTypedList但我不熟悉 GC 如何处理结构,我担心 mem 和 result 不会被释放。是这样吗?或者我应该怎么做?

0 投票
1 回答
212 浏览

android - Flutter generateJsonModelDebug 同时使用 ffi 包含的库

我想使用包含 dart FFI 的颤振库来提高性能。
库名称是位图,文档说明不需要使用任何特殊设置。
所以我添加bitmap: ^0.0.6到 pubspec.yaml 并构建它。
但是出现了构建错误,它说:

在我使用 FFI 包含的库之前有什么事情要做吗?
或者我该如何解决这个问题?