我需要调用一个C函数,该函数需要struct的指针作为参数。
这是C代码:
struct Position
{
uint64_t index;
uint64_t offset;
};
int read(const char* filename, const Position* pos, const char** data)
因此,在Go代码中,我想必须分配内存来构造Position对象并将其指针传递给C函数。也许我还需要释放内存。似乎C.CString()做了什么。那我该怎么办呢?有没有代码示例?谢谢。
最佳答案
生成的存根清楚了如何从golang调用c。使用go build -work src/main.go
生成存根并获取工作目录。在_obj/_cgo_gotypes.go
文件中找到函数原型。
即我可以获取以下生成的go存根:
type _Ctype_Position _Ctype_struct__Position
type _Ctype_struct__Position struct {
//line :1
index _Ctype_int
//line :1
offset _Ctype_int
//line :1
}
func _Cfunc_read(p0 *_Ctype_char, p1 *_Ctype_struct__Position, p2 **_Ctype_char) (r1 _Ctype_int)
如果我有这样的C头文件:
typedef struct _Position
{
int index;
int offset;
}Position;
extern int read(const char* filename, const Position* pos, const char** data);
顺便说一句,您需要在go源中引用c函数以使
go build
依赖以生成引用的函数存根。