===== Экспортирование переменных и процедур ===== Этот пример демонстрирует, как можно обратиться к переменным и процедурам одного модуля из другого. Для демонстрации примера приведены два модуля. ==== Модуль для экспорта ==== MODULE TestExport; VAR str-:ARRAY 40 OF CHAR; rVal*: REAL; BEGIN str:='Вася Пупкин'; rVal:=10.5 END Export. В этом модуле определены две экспортируемые переменные: * str --- только для чтения (со знаком '-') * rVal --- на чтение и запись (со знаком '*') Если попытаться изменить **str** --- компилятор **Компонентного Паскаля** выведет маркер ошибки, нажав на который появится сообщение, что изменять эту переменную нельзя. ==== Второй модуль ==== MODULE TestImport; IMPORT TestExport, Log; PROCEDURE Start*; BEGIN Log.String(TestExport.str); Log.Ln; TestExport.str:='Петя Телевизоров'; (* <- эта строка недопустима!!! *) Log.Real(TestExport.rVal); Log.Ln; TestExport.rVal:=50.1; Log.Real(TestExport.rVal); Log.Ln END Start; END TestImport. ^TestImport.Start В таком виде этот модуль скомпилировать невозможно. Присвоение строке запрещено. ==== Важное замечание ==== В отличии от **FreePascal** (и многих других идеологически устаревших языков) в **Компонентном Паскале** всё, что не помечено на экспорт --- скрыто. Это выверенное решение и абсолютно логичное. Никому не понравится купленная в магазине микроволновка, у которой все провода висят наружу.