Требование использования дальнего типа вызовов
Как уже упоминалось ранее, при любом обращении к оверлейной процедуре или функции из другого модуля вы должны обеспечить для всех активных процедур и функций вызовы типа FAR (дальний тип вы- зова).
Это можно хорошо проиллюстрировать на следующем примере. Предположим, что OvrA представляет собой процедуру в оверлейном модуле, а процедуры MainC и MainD - процедуры в основной програм- ме. Если основная программа вызывает MainC, которая вызывает про- цедуру MainB, которая в свою очередь обращается к процедуре OvrA, то во время обращения к процедуре OvrA процедуры MainC и MainB являются активными (они еще не выполнили возврат управления), по- этому необходимо использовать для них дальний тип вызова. Описан- ные в основной программе, процедуры MainC и MainB в обычной ситу- ации используют ближний тип вызовов (NEAR). С помощью директивы компилятора {$F+} необходимо задать дальний тип вызовов.
Самый легкий способ удовлетворения требования использования дальнего типа вызовов состоит в размещении в начале основной программы и в начале каждого модуля директивы {$F+}. Альтернатив- ный способ состоит в изменении принятой по умолчанию установки $F на {$F+} с помощью директивы командной строки /$F+ или с помощью параметра Force Far Calls (Использовать дальний тип вызова) в ди- алоговом меню Options¦Compiler (Параметры¦Компилятор) среды IDE интерактивного компилятора. По сравнению со смешанным использова- нием вызовов ближнего и дальнего типа использование вызовов толь- ко типа FAR не приводит к особенно большим дополнительным затра- там памяти: для этого требуется одно дополнительное слово прост- ранства стека на активную процедуру и один дополнительный байт на каждый вызов.