问题标签 [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 投票
1 回答
2703 浏览

flutter - 在 Dart 中将 int 转换为 Uint8

我正在使用ffityed_dataDart 库,并在这行代码中不断遇到错误,

我的错误:

类型“int”不是类型转换中“Uint8”类型的子类型

我在这里做错了什么?另一个奇怪的是,我可以使用这些库编写这行代码,并且我的 IDE 将编译并且不会抛出错误,直到你使用那行代码。我正在使用 Intellij 版本 2019.2.4

0 投票
1 回答
1168 浏览

android - 如何在 Flutter 中使用 dart:ffi 打印到控制台?

从我正在运行的以下 C++ 代码运行我的 Flutter 应用程序(在 Android 上)时尝试打印到控制台dart:ffi

在终端中没有给我任何输出。如何从 C++ 打印到 Flutter 终端?


我知道我的函数可以正常工作,因为我在指针/返回值上得到了正确的操作。

0 投票
0 回答
629 浏览

flutter - Flutter dart:ffi 使用静态 c 库 .a 存档

该文档非常不清楚如何使用通过存档文件 (library.a) 提供的静态库

第一方库 第一方本机库可以作为源代码或(签名).framework 文件包含在内。也可能包括静态链接的档案,但它需要测试。

来源:https ://flutter.dev/docs/development/platform-integration/c-interop#first-party-library

有没有人这样做过?我的具体目标是让它在 iOS 上运行。

0 投票
1 回答
1957 浏览

c - Dart C 互操作性。将整数数组传递给 C 函数

我现在正在学习 Dart,并且正在玩 Dart 与 C 的互操作性。我可以使用带有两个 int 参数的 C 方法。下面的代码:

你好飞镖

你好ç

你好.h

你好.def

这一切都很好,但我也想要一个maxC 方法,它将一个 int 数组作为输入并返回最大的数字。我怎样才能做到这一点?我已经在 C 中实现了所有必需的代码,但我不确定如何将它与 Dart“链接”。有人可以帮我吗?

0 投票
0 回答
308 浏览

flutter - 在 Dart 中运行一个同步函数 async

我正在使用带有 Rust 库的新 Dart FFI,但是对库的调用会阻塞,但是我的颤振应用程序应该在调用执行时运行。
所以我需要将同步函数转换为异步函数。
我已经尝试过隔离,我认为这应该是一个可能的解决方案,但我无法实现我的目标。
有没有办法将此同步函数转换为异步函数?

0 投票
2 回答
1327 浏览

dart - 如何将本机 void 指针传递给 Dart 隔离 - 无需复制?

我正在为 Dart 公开一个音频库(C 库)。要触发音频引擎,它需要一些初始化步骤(UI 非阻塞),然后使用执行函数触发音频处理,该函数是阻塞的(音频处理是一项繁重的任务)。这就是为什么我来阅读有关 Dart 隔离的原因。

我的第一个想法是我只需要调用隔离中的性能方法,但这似乎不可能,因为执行函数将引擎状态作为第一个参数 - 这个引擎状态是一个不透明的指针(指针在 dart:ffi )。当尝试使用计算函数将引擎状态传递给新的隔离时,Dart VM 返回错误 - 它无法将 C 指针传递给隔离。

我找不到将这些数据传递给隔离的方法,我认为这是由于主隔离的单独内存和我正在创建的内存。

所以,我可能应该在隔离中管理整个引擎状态,这意味着:

  • 创建引擎状态
  • 用一些选项(字符串)初始化它
  • 触发执行功能
  • 在运行时控制音频

我找不到任何关于如何在隔离中执行此操作的示例,但从主线程/隔离触发。既不是关于如何管理隔离内存(保持引擎状态并使用它)。我当然可以

这是我想要做的一个非孤立的例子:

在运行时,由 UI 操作触发(例如更改滑块值或单击按钮):

引擎状态可以封装在一个类中,我认为这并不重要。无论是类还是不透明数据类型,我都找不到如何管理和保持这种状态,以及从主线程执行触发器(在隔离中处理)。任何想法 ?

提前,谢谢。

PS:我注意到,在写作时,我的问题/解释可能不准确,我不得不说我在这里有点迷路,因为我从未使用过 Dart Isolates。请告诉我是否缺少某些信息。

编辑 4 月 24 日:它似乎在 Isolate 中创建和管理对象状态。但主要问题没有解决。因为 perform 方法实际上是在未完成时阻塞的,所以没有办法在隔离中仍然接收消息。我首先想到的一个选项是使用 performBlock 方法,它只执行一个音频样本块。像这样 :

但这似乎不起作用,在音频性能完成之前,进程仍然被阻塞。即使在隔离中的异步方法中调用此循环,它也会阻塞,并且不会读取任何消息。

我现在考虑将Pointer<Void>托管在主隔离中的可能性传递给另一个,然后是工作人员(仅用于执行方法),然后能够从主隔离中触发一些控制方法。

隔离Dart 包提供了一个注册表子库来管理一些共享内存。但是仍然不可能在隔离之间传递 void 指针。

[错误:flutter/lib/ui/ui_dart_state.cc(157)] 未处理的异常:无效参数:指针和结构等原生对象(来自 dart:ffi)不能在隔离之间传递。

有没有人遇到过这种情况?

0 投票
1 回答
3712 浏览

flutter - Dart/Flutter ffi(外部函数接口)本机回调,例如:sqlite3_exec

您好,我正在使用 dart:ffi 与我的原生 c/c++ 库构建接口。我需要一种方法来获取从 c 到 dart 的回调作为 sqlite 中的示例:

第三个参数sqlite3_exec是指向回调的函数指针。所以如果我在 dart 中调用这个函数,ffi我需要传递一个函数指针:并且在dart:ffi Pointer类中有一个名为fromFunctionwitch 的函数接受一个 dart 静态函数和一个exceptionalReturn; 但只需调用此函数即可获取 dart 托管函数的函数指针:(sigterm)引发 a 并且 dart 代码不再在该过程中工作。

所以我的问题:有没有办法在 dart 中获得本机回调,如 Python、c#、..

额外:有什么方法可以包含dartinoflutter项目中,因为这个ForeignDartFunction涵盖了我需要的东西。

0 投票
2 回答
2028 浏览

c++ - 我可以在 dart ffi 中调用 C++ 构造函数吗?

我是 ffi 的新手。但我成功地将 dart-ffi 与函数调用一起使用。

现在,我想在 dart ffi 中使用 C++ 对象。我不知道这是否可能,但我试过这样。

构造函数调用的原型是:

但是我有: Failed to lookup symbol <constructor_function>,我尝试了构造函数:

我做到了nm -gDC <lib>,我可以看到构造函数。

帮助 !

编辑 1: @Botje,@Richard-Heap

我正在尝试使用 OpenCV 中的 VideoCapture 实例。

我已按照 Botje 的回答中的说明进行操作。

所以我创建了一个库,如下所示:

绑定.hpp:

绑定.cpp:

我用来编译的命令:

我得到:dart: symbol lookup error: ./lib/src/bind.so: undefined symbol: _ZN2cv12VideoCaptureC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi

下一步,是使用 VideoCapture 实例的方法。

谢谢

0 投票
0 回答
1307 浏览

flutter - C++ 在 Flutter 中调用 Dart 函数

Flutter 可以使用dart:ffi. 也就是说,Dart 可以调用 C++ 方法,但是 C++ 可以调用 Dart 方法吗?

如下:</p>

截屏2020-05-08下午5.55.13.png

0 投票
1 回答
531 浏览

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

在颤振中使用 dart:ffi 编写代码与在颤振中使用方法 chanel 编写代码有什么区别。