1
我已經定義ctypes的結構,sommething這樣的:c_void_p值到void *
class MyStruct(Structure):
_fields_ = [('x', ctypes.c_ulonglong), ('y', ctypes.c_ulonglong)]
然後我使ctypes的結構在python對象,並傳入該對象用Cython功能。
struct_instance = MyStruct(4, 2)
some_cy_func(struct_instance)
在cython函數中,我需要調用C函數,它接受MyStruct類型的參數。我們需要通過值來傳遞參數,而不是通過引用。函數的調用將使用cython,而不是通過ctypes。
我的問題是,如何從ctypes中獲得C結構的實際值,然後用cython將它傳遞給C函數。
目前我已經sommething這樣的:
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函數的一些方法,或者這可能根本不可能?
其實並不需要重寫到cython結構。我們可以得到C結構體的值。很簡單,我們只需要解引用ctypes.addressof(struct_instance) – user232343