Gau*_*lio 10
这可以这样做:
1.从Python转换为C
如果你真的意味着void *这将是:
some_pyobj = "abc"
cdef void *ptr
ptr = <void *>some_pyobj
Run Code Online (Sandbox Code Playgroud)
如果你的意思PyObject *是:
cdef PyObject *ptr
ptr = <PyObject *>some_pyobj # Cast from Python object to C pointer
Run Code Online (Sandbox Code Playgroud)
然后,从C侧,PyObject struct可以通过包括Python.h.
这是参考(来自object.hPython包含文件):
/* Nothing is actually declared to be a PyObject, but every pointer to
* a Python object can be cast to a PyObject*. This is inheritance built
* by hand. Similarly every pointer to a variable-size Python object can,
* in addition, be cast to PyVarObject*.
*/
typedef struct _object {
PyObject_HEAD
} PyObject;
Run Code Online (Sandbox Code Playgroud)
2.从C转换为Python
它以两种方式工作,这意味着以下也是可能的:
cdef PyObject *ptr
ptr = <PyObject *>some_pyobj
cdef object some_other_pyobj
some_other_pyobj = <object>ptr # Cast from C pointer to Python object
Run Code Online (Sandbox Code Playgroud)
你可以:
def run():
pyobj = 'abc'
pyobj_void_star = <void *>pyobj
Run Code Online (Sandbox Code Playgroud)