我正在尝试使用 cairo 绑定(Go 包),它定义了一个包装结构,其中包含 C 类型和 C 函数,但无法使其工作。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 ,这是应该的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贡献1802条经验 获得超10个赞
对于那些感兴趣的人,我已经弄明白了。
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 关注
- 90 浏览
添加回答
举报
0/150
提交
取消