检查 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
在 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