This is topic Проблемы при передаче значений в ActiveX in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/31/t/001016.html

Posted by Triamor (Участник № / Member № 5324) on :
 
Подскажите пожалуйста в чем может быть причина следующей проблемы.
В ActiveX-компонент передаю 4-байтное значение (пробовал с типами UDINT, DINT). Вместо 4 байт передается только младшие 2 байта, а старшие два отбрасываются. Если попытаться передать это значение через тип STRING с присвоенным значением по-умолчанию, то значение передается полностью. На других компьютерах передаетются все 4 байта. Версия Trace Mode 6.07.7.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
" На других компьютерах передаются все 4 байта."

На других компютерах - тоже под управлением Trace Mode 6.07.7?
Откуда передается значение DINT в аргумент, передающий в ActiveX? Этот аргумент привязан к каналу? К какому?
Или к аргументу другого CALL? Тогда какой тип данных у этого аргумента канала CALL?
 
Posted by Triamor (Участник № / Member № 5324) on :
 
Нормально работает на других компьютерах с 6.7.07 и 6.6 Base.
Значения берутся из аргументов экрана, куда их записывает программа. Также пробовал создавать ни к чему не привязанный аргумент и задавать его значение в режиме эмуляции экрана - эффект тот же, отбрасываются старшие 2 байта у DINT и UDINT.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Какой интерфейс Вы используете для передачи этого значения:
IDispatch или IChInfo?
 
Posted by Triamor (Участник № / Member № 5324) on :
 
Разработкой ActiveX-компонента занимает другой человек. Каким образом выяснить какой интерфейс используется? (ActiveX разрабатывают на Delphi 7)
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Тип используемого интерфейса по конкретному входу конкретного ActiveX можно узнать только у разработчика ActiveX.

Чтобы связь с ActiveX в проекте зависела от ПК - не встречалось, объяснить трудно.
Надо быть уверенным, что других ПК запускается тот же проект, с тем же ActiveX.
 
Posted by Triamor (Участник № / Member № 5324) on :
 
Проекты были разными на разных компьютерах, а ActiveX один и тот же.
В итоге нашелся выход - вместо DINT использую REAL и все нормально передается. Как только ставлю целочисленный тип передаются только 2 младших байта.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
А в тех проектах, которые на других ПК работали, соответствующие аргументы какие типы данных имели?
 
Posted by Triamor (Участник № / Member № 5324) on :
 
В других проектах были DINT и UDINT.
Могут ли существовать где-то определения сколько байт отводить под какой тип данных?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В настоящее время в ActiveX по интерфейсу IDispatch передаются
целые числа - как 2-байтное целое (VT_I2)
булевы - однобайтное целое (VT_UI1)
все остальные типы - как float (VT_R4).

По интерфейсу IChInfo целые и действительные числа передаются в 4-байтном виде.

В ближайшем релизе интерфейс IDispatch будет модифицирован.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2