gpt4 book ai didi

dart - 是否可以在 C 中使用 dart 函数作为回调函数?

转载 作者:行者123 更新时间:2023-12-03 03:23:08 26 4
gpt4 key购买 nike

是否可以使用 ffi 将指向 dart 函数的指针传递给 C 模块(即传递给 * .so 库) 并直接从 * .so 库访问这个 dart 函数并通过回调的方式使用它?

最佳答案

非常感谢您提供的信息。这就是我需要的。

Dart :

int myPlus(int a, int b) {
print("dart.myPlus.a=$a,b=$b. $a+$b => ${a + b}");
return a + b;
}

main() {
...
ffi.Pointer<ffi.NativeFunction<NativeIntptrBinOp>>
pointer = ffi.Pointer.fromFunction(myPlus, 0);
print(pointer);

ffi.Pointer<ffi.NativeFunction<NativeApplyTo42And74Type>>
p17 = dylib.lookup("ApplyTo42And74");
ApplyTo42And74Type applyTo42And74 = p17.asFunction();
int result = applyTo42And74(pointer);
print("result => $result");
}

c:

#include <stdio.h>
#include <stdint.h>

typedef intptr_t (*IntptrBinOp)(intptr_t a, intptr_t b);

intptr_t ApplyTo42And74(IntptrBinOp binop) {
printf("ApplyTo42And74()\n");
intptr_t retval = binop(42, 74);
printf("returning %lu\n", retval);
return retval;
}

结果:

Pointer<NativeFunction<(IntPtr, IntPtr) => IntPtr>>: address=0x7fb4acd98000
ApplyTo42And74()
dart.myPlus.a=42,b=74. 42+74 => 116
returning 116
result => 116

关于dart - 是否可以在 C 中使用 dart 函数作为回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60988084/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com