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

cgo:在序言中使用 typedef 结构

cgo:在序言中使用 typedef 结构

Go
MMMHUHU 2021-09-10 16:21:08
我正在尝试为 lirc 进行 Go 绑定:https : //github.com/inando/go-lirclirc_init() 和 lirc_deinit() 之类的简单函数可以正常工作。对于函数“lirc_command_init()”,我需要使用结构类型:https : //github.com/inando/lirc/blob/master/lib/lirc_client.h#L334typedef struct {    char packet[PACKET_SIZE + 1];    char buffer[PACKET_SIZE + 1];    char reply[PACKET_SIZE + 1];     int head;    int reply_to_stdout;    char* next;} lirc_cmd_ctx;我首先尝试了这样的事情:func lircCommandInit(format string, v ...interface{}) (todoctx string, err error) {    var ctx C.struct_lirc_cmd_ctx    cmd := C.CString(fmt.Sprintf(format, v...))    ok, err := C.lirc_command_init(ctx, cmd)    fmt.Println(ok, err)    return}但这给了我这个错误:无法确定 C.lirc_command_init 的名称类型。不确定 struct_ 是否应该用于类型?ctx 可能需要是一个指针,但我总是得到同样的错误。然后我尝试使用包装器,但这给了我未知类型名称“lirc_cmd_ctx”的错误// #cgo LDFLAGS: -llirc_client// #cgo CFLAGS: -I /usr/include/lirc// #include <lirc_client.h>//// int lirc_command_init_custom(const char* msg)// {//     lirc_cmd_ctx ctx;//     return -2;// }import "C"我在这里做错了什么?如何在 Go 中使用该结构类型?更新:不确定这是否相关,但 C.free 也抱怨。p := C.CString(prog)defer C.free(unsafe.Pointer(p))-> 无法确定 C.free 的名称类型Go 版本:go 版本 go1.4 linux/amd64(Windows 上的 Vagrant)
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

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