Создает массив и заполняет его информацией о текущем состоянии стека вызовов.

ASTACKINFO(ArrayName)

Параметры

ArrayName

Определяет имя массива, чтобы сохранить информацию о стеке вызовов. Следующая таблица описывает информацию, возвращаемую функцией ASTACKINFO( ):

Элемент Массива Описание

1

Уровень Стека вызовов

2

Текущее имя файла программы

3

Модуль или имя Объекта

4

Модуль или имя файла-ресурса объекта

5

Номер строки в файле-ресурсе объекта

6

Содержание ресурсной строки

Возвращаемое значение

Числовое

Замечания

ASTACKINFO( ) заполняет массив информацией о всем стеке вызовов. Она объединяет функциональные возможности функций SYS(16) и PROGRAM( ), добавляя новую возможность возвращать номера строки для каждого уровня стека вызовов. Возвращаемое значение - количество уровней вложения программ или строк возвращенного массива.

ASTACKINFO( ) заполняет 6-ой элемент массива только, если содержание ресурсной строки доступно, иначе он будет оставлен пустым.

ASTACKINFO( ) обеспечивает, во 2-ом и 4-ом элементах соответственно, имя текущего файла и, если файл связан с APP или другим отдельным файлом, полное имя пути к связанной программе.

4-ый элемент содержит первоначальную информацию ресурсного файла. Для объектов, это - та же самая информация, возвращаемая SYS(16), даже когда связь образована в пределах приложения.

Обратите внимание:
ASTACKINFO () может не найти информацию о программных (.prg) файлах. В этом случае, Visual FoxPro отображает 2-ой элемент, подобно функции SYS(16). Для подробной информации, см. SYS(16) - Имя Исполняемого Программного файла .

Пример

Немодальная форма, связывается в APP файле (myAppl.app) с кнопкой buttons.vcx класса (также в APP). Разработчик выполняет myAppl.app в Visual FoxPro, чтобы отобразить форму (форма остается открытой, потому что это - не Visual FoxPro run time). Когда пользователь щелкает на кнопке, чтобы выполнить отчет, отчет (который существует вне myAppl.app), вызывает форму запроса в своем событии BeforeOpenTables.

Эта форма запроса (getcusts.scx), которая постоянно находится в myAppl.app, вызвает ASTACKINFO( ) [затем отображается массив результатов как в следующем примере] .

Скопировать код
ASTACKINFO(myarray)
DISPLAY MEMO LIKE myarray
myArray
(1,1)   1                                    && Stack level = 1
(1,2)   c:\vfp\myAppl.app                        && Current program
(1,3) frmRerport.PrintReport.Click         && Object
(1,4) c:\vfp\myclasses\buttons.vct         && Object source file name
(1,5) 42                              && Line number in the source
(1,6) THISFORM.DoReport()                  && in the source
(2,1)   2                                    && Stack level = 2
(2,2) c:\vfp\myAppl.app
(2,3) frmRerport.DoReport
(2,4) c:\vfp\forms\frmRerport.sct         && Module source file name
(2,5) 31
(2,6) DO RunListReport                     && in the source
(3,1)   3                                    && Stack level = 3
(3,2) c:\vfp\myAppl.app
(3,3)
(3,4) c:\vfp\programs\runlisterport.prg   && Module source file name
(3,5) 12
(3,6) REPORT FORM myreport1.frx            && in the source
(4,1)   4                                    && Stack level = 4
(4,2) c:\vfp\reports\myreport1.frt
(4,3) myreport1.DataEnvironment.BeforeOpenTables
(4,4) c:\vfp\reports\myreport1.frt          && Module source file name
(4,5) 31
(4,6) DO FORM getcusts                     && in the source
(5,1)   5                                    && Stack level = 5
(5,2) c:\vfp\myAppl.app
(5,3) getcusts.init
(5,4) c:\vfp\forms\getcusts.sct            && Module source file name
(5,5) 2
(5,6) ASTACKINFO(myarray)                  && in the source

См. Также