我正在尝试使用cgo为x264库编写一个小包装器,并遇到了嵌套结构的问题。该库使用许多复杂的结构,其中一些字段本身就是匿名结构。
当尝试使用cgo访问这些结构时,我遇到了编译错误,因为go声称嵌套结构不存在。
我已经将问题简化为下面粘贴的.h文件和.go文件。希望这足以清楚地显示问题。
有人知道解决此问题的解决方案或解决方法吗?
谢谢。
当尝试使用cgo访问这些结构时,我遇到了编译错误,因为go声称嵌套结构不存在。
我已经将问题简化为下面粘贴的.h文件和.go文件。希望这足以清楚地显示问题。
有人知道解决此问题的解决方案或解决方法吗?
谢谢。
struct.h
typedef struct param_struct_t {
int a;
int b;
struct {
int c;
int d;
} anon;
int e;
struct {
int f;
int g;
} anon2;
} param_struct_t;
main.go
package main
/*
#include "struct.h"
*/
import "C"
import (
"fmt"
)
func main() {
var param C.param_struct_t
fmt.Println(param.a) // Works and should work
fmt.Println(param.b) // Works and should work
fmt.Println(param.c) // Works fine but shouldn't work
fmt.Println(param.d) // Works fine but shouldn't work
// fmt.Println(param.e) // Produces type error: ./main.go:17: param.e undefined (type C.param_struct_t has no field or method e)
// fmt.Println(param.anon) // Produces type error: ./main.go:18: param.anon undefined (type C.param_struct_t has no field or method anon)
// The following shows that the first parameters and the parameters from the
// first anonymous struct gets read properly, but the subsequent things are
// read as seemingly raw bytes.
fmt.Printf("%#v", param) // Prints out: main._Ctype_param_struct_t{a:0, b:0, c:0, d:0, _:[12]uint8{0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
}
go tool cgo main.go
输出类型时,我得到了一个像这样的结构体:type _Ctype_struct_param_struct_t struct { //line :1 a _Ctype_int //line :1 b _Ctype_int //line :1 c _Ctype_int //line :1 d _Ctype_int //line :1 _ [12]byte //line :1 } - Fredrik