坚持这个问题.只能获得通过结构的第一个成员……我做错了什么?将结构从Go传递给C的正确方法是什么?
这是我的例子,说明它不起作用:
package main
/*
#include
typedef struct {
int a;
int b;
} Foo;
void pass_array(Foo **in) {
int i;
for(i = 0; i < 2; i++) {
fprintf(stderr,"[%d,%d]",in[i]->a,in[i]->b);
}
fprintf(stderr,"\n");
}
void pass_struct(Foo *in) {
fprintf(stderr,%d]\n",in->a,in->b);
}
*/
import "C"
import (
"unsafe"
)
type Foo struct {
A int
B int
}
func main() {
foo := Foo{25,26}
foos := []Foo{{25,26},{50,51}}
// wrong result = [25,0]
C.pass_struct((*_Ctype_Foo)(unsafe.Pointer(&foo)))
// doesn't work at all,SIGSEGV
// C.pass_array((**_Ctype_Foo)(unsafe.Pointer(&foos[0])))
// wrong result = [25,0],[50,0]
out := make([]*_Ctype_Foo,len(foos))
out[0] = (*_Ctype_Foo)(unsafe.Pointer(&foos[0]))
out[1] = (*_Ctype_Foo)(unsafe.Pointer(&foos[1]))
C.pass_array((**_Ctype_Foo)(unsafe.Pointer(&out[0])))
}