Dart FFI的简单分析

本文是阅读dart ffi相关的代码记录。

源码的位置

分成几个部分,dart的代码在sdk/lib/ffi下,有4个文件

  • annotations.dart
  • dynamic_library.dart : 定义DynamicLibrary类,用于加载so库
  • ffi.dart 定义Pointer类
  • native_type.dart 定义NativeType

Pointer相关的实际实现的代码,
在runtime/lib/ffi_path.dart, 定义的对应的native实现,关键的如

  • Pointer.asFunction对应 Ffi_asFunction
  • fromFunction 对应Ffi_fromFunction
  • 等等

runtime/lib/ffi_dynamic_library_patch.dart定义DynamicLibrary的实现

  • DynamicLibrary._open对应 Ffi_dl_open
  • DynamicLibrary.lookup 对应 Ffi_dl_lookup
  • 等等

对应的c++类
runtime/lib/ffi_dynamic_library.cc 实现open, loopkup等函数
runtime/lib/ffi.cc 实现fromFunction, asFunction等函数

lookup取得函数指针

dart的用法

import 'dart:ffi' as ffi;
import 'dart:io' show Platform;

// FFI signature of the hello_world C function
typedef hello_world_func = ffi.Void Function();
// Dart type definition for calling the C foreign function
typedef HelloWorld = void Function();

main() {
  // Open the dynamic library
  var path = "./hello_library/libhello.so";
  if (Platform.isMacOS) path = './hello_library/libhello.dylib';
  if (Platform.isWindows) path = r'hello_library\Debug\hello.dll'
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值