问题描述
我对 ffi
和其他 dart 内存模型的理解有些有限。因此,请提前为滥用术语和/或在其他方面无意中变得迟钝而道歉。
我有什么:
我想要什么:
- 在 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);