Hi,
You cannot pass f, which is a Go function, in a CGo call directly because
of the pointer passing rules. You need to create some wrappers, and I have
found this article
(https://eli.thegreenplace.net/2019/passing-callbacks-and-pointers-to-cgo)
very helpful.
That being said, I have a feeling that if you provide some more details
about what you are trying to achieve, people here might be able to help you
get a simpler solution in Go.
Tzu-Yu
ulis lee 在 2023年11月22日 星期三上午11:28:20 [UTC+8] 的信中寫道:
> *Hi, all*
>
> It's been a month since I started Golang.
> But I was in a difficult situation. I need your help.
>
> *C code*
>
> int reopen (const char *fn, time_t check_interval_sec, int
> (*callback_func) (int num_entry, char **entry), int retry);
>
>
> *Go code*
>
> func _Open(fileName string, intervalSec int, f func(C.int, **C.char)
> C.int) int {
>
> cFileName := C.CString(fileName)
>
> defer C.free(unsafe.Pointer(cFileName))
>
>
> ret := C.reopen(cFileName, C.long(intervalSec), f, 1)
>
> return int(ret)
>
> }
>
> error message
> cannot use f (variable of type func(_Ctype_int, **_Ctype_char) _Ctype_int)
> as *[0]byte value in argument to (_Cfunc_reopen)
>
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/golang-nuts/2b58349f-4d8f-44c9-805b-f7b52f92bbedn%40googlegroups.com.