将GO指针传递给C回调函数

时间:2018-05-30 17:53:39

标签: pointers go cgo

我需要将函数指针作为参数(即回调函数)传递给共享对象内的C函数。期望是从共享对象内的函数获得回调。我需要在GO中实现该函数,并且应该作为来自C共享对象的回调来调用。我的解决方案是在最后一步抛出分段错误。

//////////////in libcshared.so ///////////
typedef void (*test_function_ptr)(int a)
void callerfun(test_function_ptr callback)

//////////////in GO program//////C program
void* gofunptr;
void implfun(int x){
GOSharedfn(gofunptr);
}
-------------
func main(){
C.gofunptr = &gofun
var callback = C.test_function_ptr(unsafe.Pointer(C.implfun))
C.callerfun(callback )
}
var gofun = goimpl
func goimpl(){
}
/////////GO shared lib libgoshared.so/////////<br>
func GOSharedfn(unsafe.Pointer pointer){
f:=(cast to fun ptr)pointer
f();//Segmentation fault
}

Function call flow diagram

0 个答案:

没有答案