1
我在C庫中有一個結構,裏面定義了一些回調。問題去對待這個領域*[0]byte
數組類型,我不能將其設置爲指針:Cgo:無法在C結構中設置回調
./test.go:16: cannot use _Cgo_ptr(_Cfpvar_fp_cb_func) (type unsafe.Pointer) as type *[0]byte in assignment
的問題代碼示例:
package main
/*
void cb_func();
typedef struct cb_s {
void (*cb_f)();
} cb_s;
*/
import "C"
//export cb_func
func cb_func() {}
func main() {
var x C.struct_cb_s
// here I want to set callback cb_f to pointer of cb_func().
x.cb_f = C.cb_func
}
一個可能的解決方案 - 寫一個C二傳手,像這樣的:
,但它看起來醜陋:我不能通過cb_func作爲參數傳遞給二傳手(已經嘗試過cb_set(cb_s *s, void(*func)())
,但有大約* [0]字節相同的錯誤)和甲肝e許多類似的回調,因此需要爲每對回調函數編寫setter。
其他解決方案?
我已經有差不多有問題注意相同的代碼,但在不同的* .c文件代替c包裝,以消除雙重編譯。不管怎麼說,還是要謝謝你。 將等待任何其他解決方案,我希望它存在。 – sisoft
是否有其他解決方案? –