您好,我正在使用 dart:ffi 与我的本机 c/c++ 库构建一个接口。我需要一种方法来获取从 c 到 dart 的回调,例如在 sqlite 中:
int sqlite3_exec(
sqlite3*, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
Run Code Online (Sandbox Code Playgroud)
in 的第三个参数sqlite3_exec是指向回调的函数指针。所以如果我在 dart 中使用调用这个函数,ffi我需要传递一个函数指针:在dart:ffi Pointer类中有一个名为fromFunctionwitch的函数接受一个 dart 静态函数和一个exceptionalReturn; 但是仅仅通过调用这个函数来获取一个 dart 托管函数的函数指针:a(sigterm)被引发并且 dart 代码不再在这个过程中工作。
所以我的问题:有没有办法在 dart 中获得本机回调,如在 Python、c#、..
额外:有什么方法可以包含 …
我的应用程序的后端是用 C++ 编写的,前端是用 Dart/flutter 编写的。我很想在数据准备好时让后端通知前端。这需要在 Dart 和 C++ 之间实现异步回调方案。
$ flutter doctor -v
[?] Flutter (Channel stable, 1.20.1, on Mac OS X 10.15.5 19F101, locale
en-CN)
• Flutter version 1.20.1 at /Applications/Android/flutter
• Framework revision 2ae34518b8 (2 days ago), 2020-08-05 19:53:19 -0700
• Engine revision c8e3b94853
• Dart version 2.9.0
• Pub download mirror https://pub.flutter-io.cn
• Flutter download mirror https://storage.flutter-io.cn
[?] Android toolchain - develop for Android devices (Android SDK version
30.0.1)
• Android SDK at /Applications/Android/sdk
• Platform …Run Code Online (Sandbox Code Playgroud) 我创建了Flutter应用。我需要将我的应用程序连接到本地网络套接字服务。如下所示,我可以使用telnet Connect,发送数据和从服务器接收数据。我使用Flutter web_socket插件和示例。我可以连接到服务器并发送数据,但是我无法捕获(或获取数据,但没有显示任何内容。)数据。在Flutter的Google网上论坛中,有人建议我使用流而不是StreamBuilder。
To send data I use; Q101:_:49785:_:ABCDE
And receive data I get; 1:_:2:_:119351:_:N?YAZ? TOROS
Run Code Online (Sandbox Code Playgroud)
当我使用此示例(https://flutter.io/cookbook/networking/web-sockets/)时,套接字服务出现错误,如下所示:
Q: 28.06.2018 08:53:57->GET / HTTP/1.1
A: 28.06.2018 08:53:57 ->:1:_:1:_:FAIL1
Run Code Online (Sandbox Code Playgroud)
例:
Last login: Tue Jun 26 15:01:44 on ttys000
Niyazis-MBP:~ niyazitoros$ telnet
telnet> telnet 192.168.1.22 1024
Trying 192.168.1.22...
Connected to 192.168.1.22.
Escape character is '^]'.
Q101:_:49785:_:*************
1:_:2:_:119351:_:N?YAZ? TOROS
Run Code Online (Sandbox Code Playgroud)
基于@Richard Heap的建议:
import 'dart:async';
import 'dart:convert';
import 'dart:io';
void connect(InternetAddress clientAddress, int port) {
Future.wait([RawDatagramSocket.bind(InternetAddress.anyIPv4, 0)]).then(
(values) {
RawDatagramSocket _socket = values[0];
_socket.listen((RawSocketEvent e) …Run Code Online (Sandbox Code Playgroud) 如何从C ++代码调用Dart方法?我想尝试在应用程序中将Dart用作脚本语言。