Операция позднего связывания
Оператор ~ применяется для позднего связывания. Данный оператор во многом схож с использованием "точки" . - взятия поля или вызова метода, отличие состоит в том, что иногда на момент компиляции невозможно определить все возможные поля и методы объекта, а во время выполнения программы вызывается специальный метод объекта, которому передается имя поля/метода, типы и значения параметров. Технология позднего связывания часто применяется при работе с COM объектами.
Левым операндом операции ~ является идентификатор объекта, этот объект должен поддерживать позднее связывание, правым операндом является имя поля/метода, с которым необходимо связаться, например excapp~Visible - если необходимо получить/установить свойство или excapp~Cells(3,2), если необходимо вызвать какой-то метод.
Объект может поддерживать следующие возможности позднего связывания:
- простой вызов метода excapp~Quit, с параметрами или без;
- установка значения excapp~Cells( 3, 2 ) = "Hello World!";
- получение значения vis = uint( excapp~Visible );
- цепочка вызовов excapp~WorkBooks~Add, это равнозначно следующей записи
tmpobj = excapp~WorkBooks
tmpobj~Add
Недостатком использования отложенных вызовов является, то что компилятор не может проверить правильность написания полей/методов и соответствие типов, что создает сложности при отладке.
Пример использования отложенных вызовов, данный пример использует библиотеку работы с COM объектами.
include { "olecom.ge"}
...
oleobj excapp
excapp.createobj( "Excel.Application", "" )
excapp.flgs = $FOLEOBJ_INT
excapp~Visible = 1
excapp~WorkBooks~Add
excapp~Cells( 3, 2 ) = "Hello World!"