当将 go func 导出到 c 时,接口类型 port 为 GoInterface,int 为 GoInt。如何移植我的 c 函数以使用这些类型?啊void *SomeFunc(GoInterface arg);交流电void *SomeFunc(GoInterface arg) {}前package main// #include "a.h"import "C"type A struct {}func main() { var a = new(A)}当我去构建时:cc errors for preamble:In file included from ./a.go:3:0:a.h:1:16: error: unknown type name 'GoInterface' void *SomeFunc(GoInterface arg)是否有类似 jni.h 的 go 头文件用于 java,所以我可以包含这些类型。
1 回答
白猪掌柜的
TA贡献1893条经验 获得超10个赞
不,Go 没有任何方法可以将类型导出为“C 可读”。此外,您不能从 C 中引用 Go 结构,并且尝试将 C 结构“看起来像”Go 结构是不安全的,因为您无法控制内存布局。
执行此操作的“正确”方法是在 C 文件中创建一个类型并将其添加为 Go 结构中的字段:
// from C
typedef struct x {
// fields
} x;
// From Go, include your .h file that defines this type.
type X struct {
c C.x
}
然后以这种方式对您的类型进行操作,并传入C.x您所有的 C 函数而不是x.
还有其他几种方法(例如,在您想将其用作一种或另一种时在它们之间进行转换),但从模糊的一般意义上来说,这是最好的。
编辑:一些 Go 类型可以用 C 表示,例如,int64将在通过 cgo 编译的代码中定义,但在大多数情况下,我所说的都是成立的。
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消