Інженерні нотатки TwinCAT
← Всі записи

Перевірка типів під час виконання у TwinCAT: __QUERYINTERFACE та __QUERYPOINTER

Дослідження безпеки типів у рантаймі Structured Text, аналіз сумісності типів за допомогою інтерфейсів та операторів приведення типів.

У StructuredText немає вбудованого оператора для перевірки сумісності типів. Проте CoDeSys/TwinCAT надає додаткову можливість: ви можете спробувати привести змінну, що містить об’єкт, до змінної типу інтерфейсу за допомогою оператора __QUERYINTERFACE.

Рантайм виконає перевірку сумісності типів під час виконання програми, і оператор поверне TRUE, лише якщо об’єкт реалізує відповідний інтерфейс. Це працює з інтерфейсами, які успадковують __SYSTEM.IQueryInterface. Звичайно, це не замінює відсутній оператор IS, але це краще, ніж нічого.

Цікаво, що ця функціональність не працює з оператором __QUERYPOINTER. Це зазначено в документації, але виглядає не зовсім природно.

Тому інтерфейси залишаються єдиним способом делегувати перевірку сумісності типів середовищу виконання…

Перевірка типів під час виконання

#TwinCAT #CoDeSys #StructuredText #IndustrialAutomation