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即可
作者:半山
出处:http://www.cnblogs.com/xdao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-11-02 吐槽阿里云数据库的备份还原