在ctypes中子类化c_void_p是否可行?
我正在使用一个库,这个库返回的是不透明指针。请问,能不能通过继承 c_void_p 来在 ctypes 中表示这个指针,并为这种特定类型的 c_void_p 提供类型检查呢?
1 个回答
2
一种简单的方法来进行这种类型检查,就是创建一个任意的 ctypes.Structure
。
class _Opaque(ctypes.Structure):
pass
然后,把相关函数的返回类型声明为指向这个结构的指针。
lib.f.restype = ctypes.POINTER(_Opaque)
同时,也要把接受这种指针的函数的参数类型声明为这个指针:
lib.g.argtypes = [ctypes.POINTER(_Opaque)]
现在,ctypes
确保传给 g
的参数是之前由 f
返回的指针。(注意,我在 _Opaque
前面加了一个 _
,这是为了在这个模块中专用的标记。)