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

0 ответов

Другие вопросы по тегам