Динамическая загрузка XControl

Обсуждение, связанное с разработкой ПО верхнего уровня
Ответить
Аватара пользователя
Chupakabra

Tutorials
professional
professional
Сообщения: 360
Зарегистрирован: 21 янв 2009, 10:50
Награды: 1
Версия LabVIEW: 2015
Откуда: Москва
Поблагодарили: 4 раза
Контактная информация:

Динамическая загрузка XControl

Сообщение Chupakabra »

Допустим есть несколько XControl-ов (разных), имеющих одинаковые методы и свойства, можно ли динамически их подгружать при выполнении программы?
Пробовал делать обертку из обычного VI, и загружать в Subpanel, вот только к общему типу не удаетмя refnum-ы привести, чтобы в массив собрать их, например
Вложения
XControl1.png
XControl1.png (8.79 КБ) 2762 просмотра
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Динамическая загрузка XControl

Сообщение mzu2006 »

Каждый XControl определяет свой собственный тип в иерархии встроенных объектов LabVIEW. Если хочется пользоваться ссылкой на объект и узлом свойств/методов, то нельзя ли 2 XControls сделать instance одного и того же XControl'а? Т.е. XControl один, все отличия спрятаны в разном содержании Data и State?

Если это неудобно, то я применял где-то такой трюк: желаемая иерархия XControls дублируется в LVOOP.И в массив кладутся два одинаковых объекта базового класса LVOOP. Возможны и более экзотические варианты.

Вообще, иметь несколько непересекающихся иерархий объектов в языке жутко удобно. :crazy:
Аватара пользователя
Chupakabra

Tutorials
professional
professional
Сообщения: 360
Зарегистрирован: 21 янв 2009, 10:50
Награды: 1
Версия LabVIEW: 2015
Откуда: Москва
Поблагодарили: 4 раза
Контактная информация:

Re: Динамическая загрузка XControl

Сообщение Chupakabra »

LVOOP в связке с XControl сейчас применять не хочу, так как усложняется все сильно для меня, а времени особо на это нет :)
Сейчас немного другим путем пошел, но это не имеет отношение к теме. А вот то, что имеет, попробовал вместо штатного притягивания типа, использовать обычный TypeCast, и о чудо!, заработало. Проверил, метод вызываются свой для каждого XControlа. Чувствую, что это не совсем корректный подход, и где-нибудь он даст ошибку. Например не ясно как поведет себя программа при вызове метода, который есть в одном XControl и нет в другом :) Буду рад если кто-нибудь поэкспериментирует.
Вложения
typecast.png
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Динамическая загрузка XControl

Сообщение mzu2006 »

Refnum для XControl'а - это 4-х байтное число, которое не меняется при type_cast (который работает похоже на C++ reinterpret_cast).
Chupakabra писал(а):как поведет себя программа при вызове метода, который есть в одном XControl и нет в другом
LabVIEW повиснет на invoke node несуществующего метода (LV2011 - Linux). Более того, если метод имеет одно название, но реализован VI с разным названием,то всё тоже виснет.
Chupakabra писал(а):Чувствую, что это не совсем корректный подход
Согласен. Подобное экспериментирование быстро приводит :labview: во внутренне противоречивое состояние.... :crazy:
Так неправильно, я бы сказал, что то, что это сработало для полностью одинаковых методов в одной версии :labview: не значит, что сработает в другой. Или в исполняемом файле.

А почему не хотите ;
2 XControls сделать instance одного и того же XControl'а? Т.е. XControl один, все отличия спрятаны в разном содержании Data и State?
без LVOOP.
Аватара пользователя
Chupakabra

Tutorials
professional
professional
Сообщения: 360
Зарегистрирован: 21 янв 2009, 10:50
Награды: 1
Версия LabVIEW: 2015
Откуда: Москва
Поблагодарили: 4 раза
Контактная информация:

Re: Динамическая загрузка XControl

Сообщение Chupakabra »

mzu2006 писал(а): А почему не хотите ;
2 XControls сделать instance одного и того же XControl'а? Т.е. XControl один, все отличия спрятаны в разном содержании Data и State?
без LVOOP.
Правильно ли я понял, использовать единствнный XControl с разным выводом графики? Придется прятать и показывать индикаторы/контролы для разных видов? А что значит разное содержание Data, когда доступен только один терминал для XControl?
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Динамическая загрузка XControl

Сообщение mzu2006 »

Chupakabra писал(а):Правильно ли я понял, использовать единствнный XControl с разным выводом графики? Придется прятать и показывать индикаторы/контролы для разных видов?
Я предлагаю использовать 1 тип XControl'а инстанциированный дважды (брошенный на Front Panel). Таким образом содержимое Abilities остается одно и то же, но Data и State отличаются значением(они одного типа). Возможно, где-то в State лежит enum - селектор, что именно он отображает.
Chupakabra писал(а): А что значит разное содержание Data, когда доступен только один терминал для XControl?
2 инстанса XControl'а дают 2 терминала. Посмотрите в чём разница между классом и объектом(инстансом, instance) класса. (Например, здесь: http://alfredjava.wordpress.com/2008/07 ... -instance/)
Ответить

Вернуться в «Лицевая панель»