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