我需要调用一个需要struct指针作为参数的C函数。 这是C代码:
struct Position
{
uint64_t index;
uint64_t offset;
};
int read(const char* filename, const Position* pos, const char** data)
所以在Go代码中,我认为我必须使用malloc内存来构造一个Position对象并将其指针传递给C函数。也许我还需要释放记忆。这似乎是C.CString()所做的。那我该怎么办呢?有代码示例吗? THX。
答案 0 :(得分:-1)
如何通过生成的存根清除golang中的call c。使用go build -work src/main.go
生成存根并获取工作目录。在_obj/_cgo_gotypes.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);
BTW你需要在go source中引用c函数来为go build
创建一个依赖项来生成引用的函数stub。