为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 C 的多个包中重用 Go 回调?

如何在 C 的多个包中重用 Go 回调?

Go
四季花海 2021-09-21 16:30:48
有没有办法构建一个 Go + C 应用程序:从主包 X 导入包 Y 和 Z。包 M 导出一个 go 回调 F。包 X 和 Y 都是用随附的 C 文件构建的,都想从 C 源代码调用 F。一般来说,我试图弄清楚如何从用于构建最终应用程序的其他模块中随附的 C 文件调用回调。我不知道如何实现这一点或类似的东西。我也对复杂的解决方案感兴趣。
查看完整描述

3 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

我无法让它以简单的方式工作 IMO。

给定X导入Y和 的主包Z,两者都必须调用(从 C 源代码)F在 package 中声明M

我不得不:

  1. W1Fin创建一个小包装器Y并将其导出以从Y的 C 源中调用。

  2. W2Fin创建一个小包装器Z并将其导出以从Z的 C 源中调用。

  3. YCGO CPPFLAGS 中定义-DCALLBACK=W1

  4. ZCGO CPPFLAGS 中定义-DCALLBACK=W2

  5. 从 C 源代码中,任何地方,我现在都可以将其F称为CALLBACK(是的,在内部,它们都是不同的东西,我指的是在一端使用单个名称在另一端调用单个函数)。

这是令人费解的,但它是有效的,尽管配置这样的宏并生成小包装器并不理想。如果有人能详细说明一个更简单的程序,我会很高兴。我尝试过的一切都以重复的符号或不可见的声明告终。


查看完整回答
反对 回复 2021-09-21
  • 3 回答
  • 0 关注
  • 211 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信