uintptr_t不将值转换回指针

时间:2014-08-14 10:20:39

标签: pointers casting cython size-t uint

我使用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

0 个答案:

没有答案