uintptr_t не преобразует значение обратно в указатель
Я использую Cython, чтобы обернуть библиотеку C++, где я использую приведение (uintptr_t)(void *) для передачи указателей вызывающим сторонам Python и возврата в качестве дескриптора. В одном из таких сценариев - я передаю приведенный указатель как целое число Python другой функции 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