addressOf<T extends NativeType> 静态方法

  1. @Since('3.3')
Pointer<T> addressOf<T extends NativeType>(
  1. @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);