在ctypes中子类化c_void_p是否可以接受?

问题描述 投票:0回答:2

我正在与一个返回不透明指针的库进行交互。子类 c_void_p 在 ctypes 中表示这一点并为 c_void_p 的这种特殊风格提供类型检查是否可以接受?

python ctypes
2个回答
3
投票

执行此类型检查的一个简单方法可能是创建一些任意的

ctypes.Structure

class _Opaque(ctypes.Structure):
    pass

声明相关函数的返回类型为指向该结构体的指针

lib.f.restype = ctypes.POINTER(_Opaque)

以及再次接受这种指针的函数的参数类型:

lib.g.argtypes = [ctypes.POINTER(_Opaque)]

现在,

ctypes
确保
g
的参数是之前由
f
返回的指针。 (请注意,我使用前导
_
来标记
_Opaque
,仅用于本模块。)


0
投票

与 Sven 发布的想法相同,但界面更充实:

def OPAQUE_POINTER(name = 'opaque'):
    class cls(Structure):
        pass
    cls.__name__ = name
    ptr = POINTER(cls)
    return ptr

# Use like this
my_type = OPAQUE_POINTER('my_type')
© www.soinside.com 2019 - 2024. All rights reserved.