golang使用cgo调用c的回调函数,回调函数里的pUser是long类型不是void*,怎么办

golang使用cgo调用c的回调函数,回调函数里的pUser是long类型不是void*,怎么办

问题描述:

如题 golang使用cgo调用c的回调函数,回调函数里的pUser是long类型不是void*,怎么办

正常应该这么写typedef void (*IntCallback)(void *pUser, int a); 但是有些人非要typedef void (IntCallback)(long pUser, int a);将void写成long 遇到这种c的回调函数,cgo怎么调用啊

我直接把c接口头文件的long强改成了void*,目前没发现问题

把指针保存成long类型了,给它强制类型转换回去就是了,参考代码如下:

int a = 10;
long ll = (long)&a;  //把变量a的地址赋值给long类型
void *p = (void*)ll; //从long类型转变成指针,这里就是把long转成void*
int* t = (int*)p;    //从void*转成int*
int b = *t;          //此时b的值等于10
printf("%d",b);