坚持这个问题.只能获得通过结构的第一个成员……我做错了什么?将结构从Go传递给C的正确方法是什么?
这是我的例子,说明它不起作用:
package main /* #include <stdio.h> 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]))) }