Найти - Пользователи
Полная версия: Вопрос о работе с указателем
Начало » Python для новичков » Вопрос о работе с указателем
1
Sn-h
Добрый день!
Столкнулся со следующей проблемой:
имеется следующий объект: wdq1 = wdq(), где wdq – обёртка вокруг ActiveX компонента, наследующая wx.activex.ActiveXWindow. в классе wdq определён метод getdata(a,count). count – некоторое число, a – указатель на начало массива 16bit integer, в котором предполагается хранить полученные данные. этот метод вызывается по наступлению события NewData. Загвоздка в том, что после вызова метода getdata массив остаётся заполненым теми же значениями, которыми он был инициализирован, несмотря на то, что событие NewData регулярно наступает и getdata выполняется без ошибки (по крайней мере, без ошибки, которую может отловить try…except).
Указатель я определял двумя способами:

x = array('h',)

wdq1.getdata(x,n)

и

buffer = HeapAlloc(GetProcessHeap(), 8L, n * sizeof(c_short))

wdq1.getdata(buffer,n)

соответственно в первом случае пытался забрать даные обращаясь к элементам массива, во втором создавая промежуточный
массив

result = (c_short * 10).from_address(buffer)

В порядке проверки работоспособности компоненты я делал простое дельфи-приложение – данные собирались,
причём вполне адекватные.
Идеи как решать проблему у меня несколько иссякли, поэтому буду благодарен любым предположениям. (может быть, я
где-то принципиально не прав??)
Ferroman
принципиально не прав
Да. Прежде всего тем, что не читаете перед тем и куда пишите.
Андрей Светлов
array вообще не подойдет.
HeapAlloc не нужен.
from ctypes import c_short, byref
x = (c_short*count)()
wdq1.getdata(byref(x), count)
Только что-то смущает меня wx.activex.ActiveXWindow - у него конверсия типов может массив порвать во что-то невообразимое.
wx.lib.activex.ActiveXCtrl работает с ctypes как с родными.
Sn-h
Андрей Светлов
Спасибо! Попробую сравнить ощущения
Ferroman
Сорри, не заметил из оригинального поста, что разговор о обёртке.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB