这里是定义的c的函数,这里需要传一个结构体数组和一个int数组,传递的方式都是相似的
typedef struct TestStruct{
unsigned int j;
}TestStruct;
void TestFunc(struct TestStruct testStructs[],int num[],int length);
这里是go里面将c类型的切片转换为c类型的数组。
取切片的第一个元素的地址
,将其转为unsafe.Pointer,再将其转为对应C类型的指针
需要注意
: 这里是去第一个元素的地址,而不是将整个切片的地址转!
func RenderDepthMaps(inputs []DepthMapParam) {
testStructs := []C.TestStruct{}
num:=[]C.int{}
for i:=0;i<2;i++ {
testStructs = append(testStructs ,
C.TestStruct{
j: C.unsigned(i),
})
num=append(num, C.int(item.j))
}
C.TestFunc((*C.TestStruct)(unsafe.Pointer(&testStructs[0])),
(*C.int)(unsafe.Pointer(&num[0])),C.int(len(testStructs )))
}