addressOf<T extends NativeType> 静态方法
- @Since('3.3')
- @DartRepresentationOf('T') Object native
实现 native
的原生地址。
调用此函数时,native
的参数必须是一个表示变量或带有 Native 注解的函数声明的表达式。对于变量声明,类型 T
必须与 @Native
注解的类型参数相同的原生类型。对于函数声明,类型 T
必须是 NativeFunction<F>
,其中 F
是 @Native
注解的类型参数。
例如,对于暴露函数的原生 C 库
#include <stdint.h>
int64_t sum(int64_t a, int64_t b) { return a + b; }
以下代码将 sum
绑定到 Dart 函数声明,并提取原生 sum
实现的地址
import 'dart:ffi';
typedef NativeAdd = Int64 Function(Int64, Int64);
@Native<NativeAdd>()
external int sum(int a, int b);
void main() {
Pointer<NativeFunction<NativeAdd>> addressSum = Native.addressOf(sum);
}
同样,对于暴露全局变量的原生 C 库
const char* myString;
以下代码将 myString
绑定到 Dart 中的顶级变量,并提取底层原生字段的地址
import 'dart:ffi';
@Native()
external Pointer<Char> myString;
void main() {
// This pointer points to the memory location where the loader has
// placed the `myString` global itself. To get the string value, read
// the myString field directly.
Pointer<Pointer<Char>> addressMyString = Native.addressOf(myString);
}
实现
@Since('3.3')
external static Pointer<T> addressOf<T extends NativeType>(
@DartRepresentationOf('T') Object native);