Pointers uintptr\u不将值转换回指针 我使用Cython来包装C++库,在这里我使用(UntPrTrt)(Vult*)< /Stase>强制将指针传递给Python调用方,并将其作为句柄返回。在一个这样的场景中,我将一个浇铸指针作为Python整数传递给另一

Pointers uintptr\u不将值转换回指针 我使用Cython来包装C++库,在这里我使用(UntPrTrt)(Vult*)< /Stase>强制将指针传递给Python调用方,并将其作为句柄返回。在一个这样的场景中,我将一个浇铸指针作为Python整数传递给另一,pointers,casting,cython,size-t,uint,Pointers,Casting,Cython,Size T,Uint,uintptr\u不将值转换回指针 我使用Cython来包装C++库,在这里我使用(UntPrTrt)(Vult*)< /Stase>强制将指针传递给Python调用方,并将其作为句柄返回。在一个这样的场景中,我将一个浇铸指针作为Python整数传递给另一个Cython函数。在声明指针的原始函数中,反向转换到(Class*)(void*)成功生成原始指针值[在C++中验证]。而在另一个使用句柄的Cython函数中,反向转换会给出一些其他指针值,导致崩溃[在C++中验证]。对象大小的变化是否会影响

uintptr\u不将值转换回指针

我使用Cython来包装C++库,在这里我使用<强>(UntPrTrt)(Vult*)< /Stase>强制将指针传递给Python调用方,并将其作为句柄返回。在一个这样的场景中,我将一个浇铸指针作为Python整数传递给另一个Cython函数。在声明指针的原始函数中,反向转换到(Class*)(void*)成功生成原始指针值[在C++中验证]。而在另一个使用句柄的Cython函数中,反向转换会给出一些其他指针值,导致崩溃[在C++中验证]。对象大小的变化是否会影响从uintptr\u t(类*)(空*)的反向投射?或者对此类强制转换和反向强制转换是否有任何其他要求

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
A类:
@财产
def cppobj(自我):
"""
-返回指向C++对象的指针
"""
cdef uintptr=自身
调用PrttpTrC++方法
#参数-ptr
#打印:0x8805508
返回自我
B类:
def useA(自我):
调用PrttpTrC++方法
#参数-A.cppobj
#打印:0x880b718

我可能遗漏了一些东西,但是
A.cppobj
是指向
cppojb
方法的指针(在本例中为well属性),我想您需要
A().cppojb
。除了@Bi-Rico的注释之外,还需要注意的是,对于指向C结构的指针,这对我是有效的。