1

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
4

0 に答える 0