zoukankan      html  css  js  c++  java
  • cgo中调用有函数指针参数的C函数

    最近同事接一个设备的sdk,是使用的C的动态库,需要用cgo方法。
    其中有一个函数,参数需要函数指针,读了一下cgo的官方文档,发现不支持这种调用方式。

    按照官网的方法,需要用C写个gateway 函数,在C里再封装一下,提供没有函数指针参数的函数供go调用。
    本来想着有空了,写个C包装器,后来同事找他的朋友,折腾了一天,用更加巧妙的方法解决了。

    其实可以换个思路,函数指针参数,实际不就是C调用go吗?
    所以可以在go里写个函数,导出(export)到C,这样巧妙的绕过了cgo的限制了。
    所以这个流程就变成了下面这个样子。
    go-->cgo-->c(有函数指针的C函数)-->cgo-->go(导出到C的go函数)

    注意C中void函数指针,要在go中函数返回类型要定义为 unsafe.Pointer,在函数体中返回nil即可

  • 相关阅读:
    Java内部类与异常类
    Java 继承和接口
    134. 加油站
    P1567 统计天数
    P2141 珠心算测验
    P1428 小鱼比可爱
    P1427 小鱼的数字游戏
    python中使用xlrd、xlwt操作excel表格详解
    同步机制
    CSS学习
  • 原文地址:https://www.cnblogs.com/xdao/p/cgo-function-pointer-callbacks.html
Copyright © 2011-2022 走看看