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

有没有办法构建一个 Go + C 应用程序:

  • 从主包 X 导入包 Y 和 Z。

  • 包 M 导出一个 go 回调 F。

  • 包 X 和 Y 都是用随附的 C 文件构建的,都想从 C 源代码调用 F。

一般来说,我试图弄清楚如何从用于构建最终应用程序的其他模块中随附的 C 文件调用回调。我不知道如何实现这一点或类似的东西。我也对复杂的解决方案感兴趣。


四季花海
浏览 214回答 3
3回答

SMILET

我无法让它以简单的方式工作 IMO。给定X导入Y和 的主包Z,两者都必须调用(从 C 源代码)F在 package 中声明M,我不得不:W1为Fin创建一个小包装器Y并将其导出以从Y的 C 源中调用。W2为Fin创建一个小包装器Z并将其导出以从Z的 C 源中调用。在YCGO CPPFLAGS 中定义-DCALLBACK=W1在ZCGO CPPFLAGS 中定义-DCALLBACK=W2从 C 源代码中,任何地方,我现在都可以将其F称为CALLBACK(是的,在内部,它们都是不同的东西,我指的是在一端使用单个名称在另一端调用单个函数)。这是令人费解的,但它是有效的,尽管配置这样的宏并生成小包装器并不理想。如果有人能详细说明一个更简单的程序,我会很高兴。我尝试过的一切都以重复的符号或不可见的声明告终。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go