TURBO PASCAL |
Новости
|
Разделы инициализации в оверлейных модуляхАналогично статическим модулям оверлейные модули могут со- держать секцию инициализации. Хотя оверлейный код инициализации не отличается от обычного кода инициализации, администратор овер- леев должен первоначально инициализироваться таким образом, чтобы он мог загружать и выполнять оверлейные модули. Взяв в качестве примера ранее рассмотренную программу Editor, предположим, что модули EdInOut и EdMain содержат код инициализации. При этом требуется, чтобы процедура OvrInit вызы- валась перед кодом инициализации модуля EdInOut, и единственный способ осуществить это состоит во введении дополнительного нео- верлейного модуля, который следует перед EdInOut и вызывает в своем разделе инициализации процедуру OvrInit. unit EdInit; interface implementation uses Overlay; const OvrMaxSize = 80000; begin OvrInit('EDITOR.OVR'); OvrInitEMS; OvrSetBuf(OvrMaxSize); end. В операторе uses программы модуль EdInit должен следовать перед всеми оверлейными модулями: program Editor; {$F} uses Overlay,Crt,Dos,EdInit,EdInOut,EdFormat,EdPrint,EdMain; {$O EdInOut } {$O EdFormat } {$O EdPrint } {$O EdFind } {$O EdMain } В общем случае, хотя использование кода инициализации в оверлейных модулях и допускается, по ряду причин его следует из- бегать. Во-первых, код инициализации, даже если он выполняется толь- ко один раз, является частью оверлея и будет занимать пространс- тво в оверлейном буфере при каждой загрузке оверлея. Во-вторых, если большое число оверлейных модулей содержат код инициализации, каждый из них придется считывать в память при загрузке программы. Намного более привлекательный подход состоит в том, чтобы собрать весь код инициализации в оверлейный модуль инициализации, который вызывается только один раз при загрузке программы и к ко- торому затем программа не обращается. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |