This is topic Проблемы при передаче значений в ActiveX in forum TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version at Форум TRACE MODE: техническая поддержка.
Подскажите пожалуйста в чем может быть причина следующей проблемы. В 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 будет модифицирован.