Структура копирования Python ctypes, расположенная во временном буфереPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Структура копирования Python ctypes, расположенная во временном буфере

Сообщение Anonymous »


У меня есть код, который выглядит следующим образом:

из импорта ctypes * импортировать некоторую_библиотеку класс Вещь(Структура): _поля_ = [ ("А", c_uint8*4), («Б», Группа*4)] pointer_to_thing = POINTER(вещь)() защита get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание some_library.release_memory() вернуть вещь вещь = получить_вещь() что не удается, потому что some_library.give_me_the_thing() дает мне ссылку на эту вещь, а some_library.release_memory() освобождает память, в которой находится эта вещь. Если я прокомментирую some_library.release_memory(), это сработает, но это должно быть сделано не так. Я должен освободить память перед возвратом из функции, поэтому я хотел бы сделать копию объекта и вернуть эту копию, вот так:

def get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание копия_вещи = Вещь() мемпереместить( адрес(копия_вещи), адрес(вещи), размер(Вещь), ) some_library.release_memory() вернуть копию_вещи Однако он всегда возвращает Thing с неправильными данными. Если some_library.release_memory() прокомментирован, то все работает как положено. Как будто он вообще не копирует содержимое...

Я тоже пробовал

def get_thing(): some_library.allocate_memory_for_thing() some_library.read_thing() pointer_to_thing = some_library.give_me_the_thing() вещь = указатель_на_вещь.содержание copy_of_thing = Thing.copy_from_buffer(вещь) some_library.release_memory() вернуть копию_вещи и поведение точно такое же, т. е. если я освобождаю память, происходит сбой, если нет, то работает.

К сожалению, some_library — сложная вещь, и мне не так-то просто создать MWE для публикации здесь.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Упаковка ctypes ctypes. Структура внутри класса в Python
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Python ctypes и np.array.ctypes.data_as неожиданное поведение при нарезке
    Anonymous » » в форуме Python
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Неожиданное поведение Python ctypes и np.array.ctypes.data_as при индексировании
    Anonymous » » в форуме Python
    0 Ответы
    37 Просмотры
    Последнее сообщение Anonymous
  • Неожиданное поведение Python ctypes и np.array.ctypes.data_as при индексировании
    Anonymous » » в форуме Python
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Ошибка ctypes: аргумент byref() должен быть экземпляром ctypes, а не целочисленным значением
    Anonymous » » в форуме Python
    0 Ответы
    90 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»