Форум сайта python.su
Добрый день!
Столкнулся со следующей проблемой:
имеется следующий объект: 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)
В порядке проверки работоспособности компоненты я делал простое дельфи-приложение – данные собирались,
причём вполне адекватные.
Идеи как решать проблему у меня несколько иссякли, поэтому буду благодарен любым предположениям. (может быть, я
где-то принципиально не прав??)
Офлайн
принципиально не правДа. Прежде всего тем, что не читаете перед тем и куда пишите.
Офлайн
array вообще не подойдет.
HeapAlloc не нужен.
from ctypes import c_short, byref
x = (c_short*count)()
wdq1.getdata(byref(x), count)
Офлайн
Андрей СветловСпасибо! Попробую сравнить ощущения
…
Офлайн
Сорри, не заметил из оригинального поста, что разговор о обёртке.
Офлайн