Поиск программных компонентов Visual FoxPro
« Назад При вызове программного компонента, если явно не казан путь, VFP осуществляет его поиск в следующем порядке: 1) среди процедур и функций текущего файла; 2) в текущей базе данных среди хранимых процедур; 3) среди программных компонентов, открытых командой SET PROCEDURE; 4) среди ранее выполненных программных компонентов начиная от самого последнего; 5) среди процедур, открытых SET LIBRARY; 6) ищется файл с программами, имеющий то же имя, что и вызываемый программный компонент; поиск осуществляется в директории по умолчанию, заданной командой SET DEFAULT, и в директориях, указанных командой SET PATH. В случае неудачи генерируется ошибка: "File <имя файла> does not exist". Список процедур текущей базы данных возвращает команда DISPLAY | LIST PROCEDURES, например: close databases open database 'd:\HomeLibrary\HomeLibrary' list procedures && или: display procedures Команда SET PROCEDURE TO [FileName1 [, FileName2, ...]] [ADDITIVE]открывает файл FileName1 (или несколько файлов) с программными компонентами. Опция ADDITIVE позволяет открыть новый файл, не закрывая ранее открытые. Так, если выполнить set procedure to d:\Output.prg && Расширение можно опустить то функция SET("Procedure") вернет D:\OUTPUT.FXP. Расширение FXP в полученном результате говорит о том, что VFP открывает откомпилированный файл. Если же имеется только файл с исходным текстом, то VFP выполнит его компиляцию. При вызове программного компонента VFP включит в список просматриваемых процедур все программные компоненты, имеющиеся в файлах, открытых командой SET PROCEDURE. Пример. Пусть вызывающая программа имеет следующий код: set procedure to d:\Output3 Output3(25, Sqrt(25)) SomeProc( ) SomeFunc( ) а файл d:\Output3.prg помимо основной программы имеет процедуру SomeProc( ) и функцию SomeFunc( ) lparameters xVal, yVal && Основная программа файла d:\Output3.prg ? "x = ", xVal picture "99" ? "Квадратный корень из x равен ", yVal picture "9.9" procedure SomeProc && Процедура файла d:\Output3.prg ? "Это процедура SomeProc( )" endProc function SomeFunc && Функция файла d:\Output3.prg ? "Это функция SomeFunc( )" endFunc Тогда при исполнении вызывающей программы будут найдены и основная программа файла d:\Output3.prg, и его процедура и функция. Результат: x = 25 Квадратный корень из x равен 5,0 Это процедура SomeProc( ) Это функция SomeFunc( ) Команда CLOSE PROCEDUREили SET PROCEDURE TOзакрывают все файлы с программными компонентами, открытые командой SET PROCEDURE. После вызова программы посредством оператора DO и указания полного имени файла, в который программа помещена, основная программа и другие программные компоненты файла добавляются в буфер откомпилированных программ. Обращение к любому программному компоненту буфера выполняется без указания имени файла, в котором этот компонент расположен. Так, после запуска основной программы ранее рассмотренного файла d:\Output3.prg && Закрывает все ранее открытые программные компоненты && и очищаем буфер откомпилированных программ set procedure to clear program set procedure to d:\Output3 в буфере откомпилированных программ окажутся не только основная программа файла, но и процедура SomeProc( ) и функция SomeFunc( ). Поэтому вызовы SomeProc( ) SomeFunc( ) а также вызов Output3(25, Sqrt(25)) завершатся успешно в том смысле, что эти программные компоненты будут найдены. После выполнения CLOSE PROCEDURE или SET PROCEDURE TO, или RELEASE PROCEDURE d:\Output3 программные компоненты файла d:\Output3.prg окажутся недоступными. Замечание. Если программные компоненты файла загружены в буфер откомпилированных программ в результате выполнения команды DO, например do d:\Output3 with 25, Sqrt(25) то их удаление из буфера выполняется командой CLEAR PROGRAM. Команда RELEASE PROCEDURE FileName1 [, FileName2 …]закрывает файлы FileName1, FileName2… с программными компонентами, открытыми командой SET PROCEDURE. Пример: set procedure to d:\Output3.prg … release procedure d:\Output3.prg Функция SYS(2450 [, 0 | 1])изменяет порядок поиска файлов и программных компонентов. Если второй параметр функции есть 0, то поиск прежде выполняется в директории по умолчанию и вдоль пути, а затем в приложении. Если второй параметр равен 1, то порядок поиска меняется: сначала в приложении среди определенных пользователем функций, затем в директории по умолчанию и вдоль пути. Возвращаемая функцией величина имеет тип Character. При вызове без параметра функция вернет "0" или "1", показывая текущий порядок поиска. Впрочем, несмотря на установку SYS(2450), программные компоненты, открытые SET PROCEDURE, будут просматриваться при поиске файла в первую очередь. |