func RVExtensionArgs(output *C.char, outputsize C.size_t, input *C.char, argv **C.char, argc C.size_t) {
temp := fmt.Sprintf("Hello %s %d %s!", C.GoString(input), argc, C.GoString(*argv)
// return to C program, the string
result := C.CString(temp)
defer C.free(unsafe.Pointer(result))
var size = C.strlen(result) + 1
if size > outputsize {
size = outputsize
}
C.memmove(unsafe.Pointer(output), unsafe.Pointer(result), size)
}
-j
-j
i have a little problem to convert a C char array to a string array in golang
var offset = unsafe.Sizeof(uintptr(0))
func argv2go(argv **C.char) []string {
var out []string
for *argv != nil {
out = append(out, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
return out
}
-j
func RVExtensionArgs(output *C.char, outputsize C.size_t, input *C.char, argv **C.char, argc C.int) {
var offset = unsafe.Sizeof(uintptr(0))
var out []string
limit := *(*int)(unsafe.Pointer(&argc))
if limit < 1000 {
for index := 0; index < limit; index++ {
out = append(out, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
}
temp := fmt.Sprintf("Hello %s %d %s!", C.GoString(input), limit, out)
// Return a result to Arma
result := C.CString(temp)
defer C.free(unsafe.Pointer(result))
var size = C.strlen(result) + 1
if size > outputsize {
size = outputsize
}
C.memmove(unsafe.Pointer(output), unsafe.Pointer(result), size)
}Saisissez le code ici...
for index := C.int(0); index < argc; index++ {
out = append(out, C.GoString(*argv))
argv = (**C.char)(unsafe.Pointer(uintptr(unsafe.Pointer(argv)) + offset))
}
func Float64bits(f float64) uint64 { return *(*uint64)(unsafe.Pointer(&f)) }
adapted to my use case
*(*int)(unsafe.Pointer(limit)