Ich versuche, mit einigen C-Code von Go zu verbinden. Mit cgo war dies relativ einfach, bis ich diesen (ziemlich häufigen) Fall traf: Ich musste einen Zeiger auf eine Struktur übergeben, die selbst einen Zeiger auf einige Daten enthält. Ich kann mir nicht vorstellen, wie ich das von Go aus machen kann, ohne die Struktur in den C-Code selbst zu übernehmen, was ich lieber nicht machen würde. Hier ist ein Ausschnitt, der das Problem veranschaulicht:Wie kann ich void * C Zeiger in Go ausfüllen?
package main
// typedef struct {
// int size;
// void *data;
// } info;
//
// void test(info *infoPtr) {
// // Do something here...
// }
import "C"
import "unsafe"
func main() {
var data uint8 = 5
info := &C.info{size: C.int(unsafe.Sizeof(data)), data: unsafe.Pointer(&data)}
C.test(info)
}
Während dieses feine kompiliert, zu laufen versuchen, es ergibt sich:
panic: runtime error: cgo argument has Go pointer to Go pointer
In meinem Fall die Daten an die C-Aufruf übergeben wird nicht über den Aufruf hinaus bestehen (dh der fragliche C-Code gräbt sich in die Struktur ein, kopiert was er braucht und kehrt dann zurück).
Danke. Das ist es, womit ich endete ... Ich hoffte nur auf etwas weniger Ausführliches. –