从本机分配的内存位置实例化 dart ffi.struct

问题描述

我对 ffi 和其他 dart 内存模型的理解有些有限。因此,请提前为滥用术语和/或在其他方面无意中变得迟钝而道歉。

我有什么:

  • 原生 (C++) 端结构定义
  • dart/ffi 侧匹配结构定义
  • 能够调用本机函数,该函数返回指向已分配结构的指针,并相应地进行 ffi 映射。

我想要什么:

  • 在 dart 方面,一种直接将指针映射到本机对象的方法

我可以调用本机端函数,该函数返回指向已分配结构的指针,并让 dart ffi 库将其映射到 dart 等效对象。像这样说:

typedef _process_func_native = ffi.Pointer<ProcessResult> Function(ffi.Int64);
typedef _process_func_dart = ffi.Pointer<ProcessResult> Function(int);
final _process_func_dart _process_data = _lib
    .lookup<ffi.NativeFunction<_process_func_native>>('process_data')
    .asFunction();

其中 ProcessResult一个扩展 ffi.Struct 的飞镖类

说我可以访问由本机端分配结构的内存位置。如何直接在 dart 中访问它?


问这个问题就像有效的橡皮擦,我在写作时想出了答案。我仍然会发布这个问题的答案。对问题如此简单,感到惊喜,也可能觉得有点傻。如果您认为它没有增加太多,请随时投票删除此问题。

解决方法

您可以使用 Pointer<>.fromAddress() 直接映射这样的指针:

ffi.Pointer<ProcessResult>.fromAddress(address);