cgo是否支持回调

wenjin_gu · · 4159 次点击
该方式可行,非常感谢。另外问下如果改为: fmt.Println(int(C.bridge_int_func(Fortytwo)))会报编译错误:cannot use Fortytwo (type func() int) as type *[0]byte in argument to _Cfunc_bridge_int_func,这是为什么呢?跟你用的方式的区别在哪呢?
#4
更多评论
polaris
社区,需要你我一同完善!
说的是这样吗? package main // typedef int (*intFunc) (); // // int // bridge_int_func(intFunc f) // { // return f(); // } // // int fortytwo() // { // return 42; // } import "C" import "fmt" func main() { f := C.intFunc(C.fortytwo) fmt.Println(int(C.bridge_int_func(f))) // Output: 42 }
#1
首先谢谢您的回答。我主要是想用Go语言来实现回调函数,对应到您的代码就是将fortytwo函数用Go语言来实现。由于cgo是不支持在C代码中调用Go代码的,所以这种方式恐怕不行。
#2