我正在嘗試使用 cairo 綁定(Go 包),它定義了一個包裝結(jié)構(gòu),其中包含 C 類型和 C 函數(shù),但無法使其工作。cairo 包定義了一個上下文:package cairo...type Context struct { Ptr *C.cairo_t}...然后,從主包中,我想使用它的指針:package main...cr := cairo.Create(surf.Surface)layout := C.pango_cairo_create_layout(cr.Ptr)...accepts ,這是應(yīng)該的C.pango_cairo_create_layout。但是,go 編譯器不同意:*C.cairo_tcr.Ptr./main.go:114:157: cannot use cr.Ptr (type *cairo._Ctype_struct__cairo) as type *_Ctype_struct__cairo in argument to func literal可以看出,cr.Ptr是類型*cairo.C.cairo_t而不是*C.cairo_t類型,即包命名空間是類型的一部分。我找到了https://github.com/golang/go/issues/13467,它討論了使用 reflect 包和unsafe.Pointer. 但是,我無法讓它工作。我如何正確地“彎曲”它以便它編譯和工作?
1 回答

守候你守候我
TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個贊
對于那些感興趣的人,我已經(jīng)弄明白了。
package main
...
cr := cairo.Create(surf.Surface)
ptr := (*C.cairo_t)(unsafe.Pointer(reflect.ValueOf(cr.Ptr).Pointer()))
layout := C.pango_cairo_create_layout(ptr)
...
也許可以更簡單地完成,但這很有效。
- 1 回答
- 0 關(guān)注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消