【OpenIM原创】C/C++调用golang函数,golang回调C/C++函数

本文详细介绍了如何在Go和C/C++之间进行互调,特别是如何从C调用Go函数并实现回调。通过示例代码展示了Go如何编译为动态库,C如何调用Go函数,以及Go如何调用C的回调函数,从而在C项目中利用Go实现特定业务逻辑,提高开发效率。

需求来源

Open-IM 是由前微信技术专家打造的全开源、永久免费、无限制的即时通讯组件。Open-IM 包括 IM 服务端和客户端 SDK,实现了高性能、轻量级、易扩展等重要特性。开发者通过集成 Open-IM 组件,并私有化部署服务端,可以将即时通讯、实时网络能力免费、快速集成到自身应用中,并确保业务数据的安全性和私密性。

OpenIM包括Server和SDK,两者都是采用golang实现的,移动端通过gomobile生成代码,再加上对应的插件,这样能适应多个前端开发框架,无论是原生的iOS、Android还是跨端开发的Flutter、uniapp、react native、cordova等。OpenIM SDK 要用在pc端electron框架中,先解决C调用golang的问题,再打通nodejs调用C /C++,当然这里还涉及到各种回调函数。

img

网上有很多例子告诉你怎么从Go语言调用C /C++语言的函数,但少文章有告诉你,如何从C /C++语言函数中调用Golang语言写的函数。本文通过实际代码,来展示两个能力:(1)golang如何编译成动态库so (2)C /C++如何调用golang函数 (3)golang如何调用C /C++的回调函数。

goland代码及注意事项

a.go代码:

package main
/*
#cgo CFLAGS: -I .
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef void (*callback)(void *,int);
extern void c_callback (void *,int);
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值