Уведомления

Группа в Telegram: @pythonsu

#1 Май 29, 2009 17:50:36

Sn-h
От:
Зарегистрирован: 2009-05-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о работе с указателем

Добрый день!
Столкнулся со следующей проблемой:
имеется следующий объект: 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)

В порядке проверки работоспособности компоненты я делал простое дельфи-приложение – данные собирались,
причём вполне адекватные.
Идеи как решать проблему у меня несколько иссякли, поэтому буду благодарен любым предположениям. (может быть, я
где-то принципиально не прав??)



Офлайн

#2 Май 29, 2009 19:30:21

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос о работе с указателем

принципиально не прав
Да. Прежде всего тем, что не читаете перед тем и куда пишите.

Офлайн

#3 Май 29, 2009 19:44:14

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Вопрос о работе с указателем

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 как с родными.



Офлайн

#4 Июнь 1, 2009 14:31:31

Sn-h
От:
Зарегистрирован: 2009-05-29
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Вопрос о работе с указателем

Андрей Светлов
Спасибо! Попробую сравнить ощущения



Офлайн

#5 Июнь 1, 2009 15:50:35

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Вопрос о работе с указателем

Сорри, не заметил из оригинального поста, что разговор о обёртке.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version