代码之家  ›  专栏  ›  技术社区  ›  David M. Karr

cgo从*type转换为*void

cgo
  •  0
  • David M. Karr  · 技术社区  · 3 年前

    我发现使用cgo最困难的部分是类型转换。

    我在“*VeFPE”类型的范围内有一个变量,该类型在C头文件中定义如下:

    typedef struct VeFPE_st *VeFPE;
    

    我必须调用一个需要“VeObj”类型参数的方法,该参数在C头文件中定义如下:

    typedef void *VeObj;
    

    如果我只是提供变量而没有任何限制,我得到

    cannot use xxxxx (variable of type *_Ctype_VeFPE) as _Ctype_VeObj value in argument to C.yyyyy
    

    我试过几种不同的方法。我注意到了 https://jamesadam.me/2016/03/26/c-and-go-dealing-with-void-parameters-in-cgo/ ,这可能是相关的,但我不确定。

    我想可能是“unsafe.Pointer(xxxxx)”的变体,但这给出了基本相同的错误。

    0 回复  |  直到 3 年前