c_void_p值为void *

时间:2013-07-04 15:14:17

标签: python c ctypes cython

我已经定义了ctypes结构,像这样:

class MyStruct(Structure):
    _fields_ = [('x', ctypes.c_ulonglong), ('y', ctypes.c_ulonglong)]

然后我在python中创建ctypes结构对象,并将该对象传递给cython函数。

struct_instance = MyStruct(4, 2)
some_cy_func(struct_instance)

在cython函数中我需要调用接受MyStruct类型参数的C函数。我们需要按值传递参数,而不是通过引用。对函数的调用将使用cython,而不是通过ctypes。

我的问题是,如何从ctypes中获取C struct的实际值,然后使用cython将其传递给C函数。

目前我有这样的事情:

ptr = ctypes.cast(ctypes.addressof(struct_instance), ctypes.POINTER(ctypes.c_void_p))
prt_content = ptr.contents

在prt_content中我有c_void_p(4),但这对我没有帮助。有没有人知道如何将cypes结构传递给通过cython包裹的C函数,或者这根本不可能?

1 个答案:

答案 0 :(得分:1)

Cython不知道ctypes。你必须使用Cython结构:

cdef struct MyStruct:
    unsigned long long x
    unsigned long long y

cdef MyStruct struct_instance

struct_instance.x = 4
struct_instance.y = 2

some_cy_func(struct_instance)