Тема / Topic: Проблемы при передаче значений в ActiveX
Triamor
Junior Member / Новичок
Участник № / Member № 5324
отправлено / posted
Подскажите пожалуйста в чем может быть причина следующей проблемы. В ActiveX-компонент передаю 4-байтное значение (пробовал с типами UDINT, DINT). Вместо 4 байт передается только младшие 2 байта, а старшие два отбрасываются. Если попытаться передать это значение через тип STRING с присвоенным значением по-умолчанию, то значение передается полностью. На других компьютерах передаетются все 4 байта. Версия Trace Mode 6.07.7.
Сообщения / Posts 8 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
" На других компьютерах передаются все 4 байта."
На других компютерах - тоже под управлением Trace Mode 6.07.7? Откуда передается значение DINT в аргумент, передающий в ActiveX? Этот аргумент привязан к каналу? К какому? Или к аргументу другого CALL? Тогда какой тип данных у этого аргумента канала CALL?
Сообщения / Posts 17324 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Triamor
Junior Member / Новичок
Участник № / Member № 5324
отправлено / posted
Нормально работает на других компьютерах с 6.7.07 и 6.6 Base. Значения берутся из аргументов экрана, куда их записывает программа. Также пробовал создавать ни к чему не привязанный аргумент и задавать его значение в режиме эмуляции экрана - эффект тот же, отбрасываются старшие 2 байта у DINT и UDINT.
Сообщения / Posts 8 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Какой интерфейс Вы используете для передачи этого значения: IDispatch или IChInfo?
Сообщения / Posts 17324 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Triamor
Junior Member / Новичок
Участник № / Member № 5324
отправлено / posted
Разработкой ActiveX-компонента занимает другой человек. Каким образом выяснить какой интерфейс используется? (ActiveX разрабатывают на Delphi 7)
Сообщения / Posts 8 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
Тип используемого интерфейса по конкретному входу конкретного ActiveX можно узнать только у разработчика ActiveX.
Чтобы связь с ActiveX в проекте зависела от ПК - не встречалось, объяснить трудно. Надо быть уверенным, что других ПК запускается тот же проект, с тем же ActiveX.
Сообщения / Posts 17324 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Triamor
Junior Member / Новичок
Участник № / Member № 5324
отправлено / posted
Проекты были разными на разных компьютерах, а ActiveX один и тот же. В итоге нашелся выход - вместо DINT использую REAL и все нормально передается. Как только ставлю целочисленный тип передаются только 2 младших байта.
Сообщения / Posts 8 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
А в тех проектах, которые на других ПК работали, соответствующие аргументы какие типы данных имели?
Сообщения / Posts 17324 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Triamor
Junior Member / Новичок
Участник № / Member № 5324
отправлено / posted
В других проектах были DINT и UDINT. Могут ли существовать где-то определения сколько байт отводить под какой тип данных?
Сообщения / Posts 8 | Из / From: Russia
| IP / IP: IP адрес / IP address |
отправлено / posted
В настоящее время в ActiveX по интерфейсу IDispatch передаются целые числа - как 2-байтное целое (VT_I2) булевы - однобайтное целое (VT_UI1) все остальные типы - как float (VT_R4).
По интерфейсу IChInfo целые и действительные числа передаются в 4-байтном виде.