Передача указателей GO в функцию обратного вызова C - PullRequest
0 голосов
/ 30 мая 2018

У меня есть требование передать указатель функции в качестве параметра (то есть функцию обратного вызова) в функцию 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
}

Блок-схема вызова функции

...