检查 Dart FFI 中是否为 nullptr

Check if nullptr in Dart FFI

在 Dart 中使用 FFI 检查指针是否为空指针的最佳方法是什么?

目前的做法是这样的:

ffi.Pointer<Thing> thing = ... // can potentially return null
if(thing == ffi.nullptr) {
 ...

但是,当然,这会给出 "Equality operator == invocation with references of unrelated types." 警告消息。

API 仍然很新,我不确定如何处理它。我也可能想得太多了,有一个超级简单的答案。

好吧,我还没有尝试 dart:ffi 但是从 API 文档中 == 你可以看到:

Equality for Pointers only depends on their address

https://api.dart.dev/dev/2.6.0-dev.0.0/dart-ffi/Pointer-class.html

所以,你能做的就是比较两个指针的地址:

ffi.Pointer<Thing> thing = ... // can potentially return null
if(thing.address == ffi.nullptr.address) {
 ...

事实上,空指针只是一个指向地址0的指针:

final Pointer<Void> nullptr = Pointer.fromAddress(0)

https://api.dart.dev/dev/2.6.0-dev.0.0/dart-ffi/nullptr.html