Cython を使用して C++ ライブラリをラップしています。ここでは、(uintptr_t)(void *)キャストを使用してポインターを Python 呼び出し元に渡し、getback をハンドルとして使用しています。そのようなシナリオの 1 つでは、キャストされたポインターを 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