kqbi
2021-06-30 10:42
采纳率: 100%
浏览 9

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怎么调用啊

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • kqbi 2021-06-30 14:06
    已采纳

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

    已采纳该答案
    评论
    解决 无用 1
    打赏 举报
  • qfl_sdu 2021-06-30 10:50

    把指针保存成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);
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题