我使用Cython包装一个C ++库,我使用(uintptr_t)(void *)强制转换来传递指向python调用者和getback作为句柄的指针。在一个这样的场景中 - 我将一个铸造指针作为Python Integer传递给另一个Cython函数。在声明指针的原始函数中,反向强制转换为(Class *)(void *),成功生成原始指针值[在C ++中验证]。在另一个使用句柄的Cython函数中,反向投射给出一些其他指针值导致崩溃[在C ++中验证]。对象大小的变化是否会影响从 uintptr_t 到(Class *)(void *)的反向投射?或者对这种演员和反向演员还有其他要求。
Class A:
@property
def cppobj(self):
"""
- return pointer to C++ Object
"""
cdef uintptr_t ptr = <uintptr_t><void *> self._obj
# call to printptr C++ method
# argument - <cpp.A *><void *> ptr
# prints: 0x8805508
return <uintptr_t><void *> self._obj
class B:
def useA(self):
# call to printptr C++ method
# argument - <cpp.A *><void *> A.cppobj
# prints: 0x880b718