59
вспомогательные функции. Многие из перечисленных задач более эффективно
решаются средствами других доступных библиотек, поэтому эта библиотека в
значительной степени служит средством поддержания преемственности
языков программирования, аппаратных компьютерных решений и
операционных систем.
Графическая библиотека пришла в системы программирования из
MS
DOS. Она служит для формирования графического интерфейса пользователя
(
GUI – Graphic User Interface), а также обеспечивает управление графической
системой, построение изображений на экране и получение параметров
изображения. Функции этой библиотеки также перекрываются более
развитыми средствами современных операционных систем.
Библиотека классов С++ представляет собой ряд библиотек: библиотеку
классов ввода-вывода, ориентированного на поток; библиотеку контейнерных
классов; библиотеку специализированных классов. В программах на языке
С++ для
организации ввода-вывода можно использовать функции как
стандартной библиотеки С, так и библиотеки классов С++. Особенность
применения классов состоит в том, что форма ввода-вывода объекта
определяется не форматами, которые должен указать программист, а
автоматически - классом объекта. Контейнерные классы обеспечивают работу
с динамически изменяемыми данными (списками, очередями, стеками и т.п.).
Специализированные классы ориентированы на обработку строковых данных
и комплексных данных.
Дополнительные библиотеки системы программирования С++ являются
либо принадлежностью операционной системы, либо ее специальными
расширениями. Так,
библиотека объектов Windows (
OWL – Object Windows
Library) входит в состав операционной системы, она поддерживает единый
прикладной программный интерфейс (
АРI - Application Program Interface)
Windows, известный как
Win16 АРI и
Win32 АРI. Система программирования
дает пользователям средства этой библиотеки для формирования внешнего
оконного интерфейса разрабатываемых программ.
Библиотека поддержки
технологии
связывания и внедрения объектов (
OLE – Object Linking and
Embedding) представляет собой расширение операционной системы.
OLE -
технология позволяет устанавливать «нетрадиционные» связи между
программами. Каждая программа может искать и использовать необходимые
ей программные ресурсы в других доступных программах, а также готова
предоставить свои ресурсы другим программам. Технология ориентирована на
поддержку гибких средств обеспечения внутреннего интерфейса.
В зависимости от времени, когда происходит подключение библио-
течных
функций к программе, различают библиотеки статические и ди-
намические. Необходимые программе функции
статических библиотек
помещает в нее редактор связей. Эти функции составляют часть выполняемого
модуля. Функции
динамических библиотек подключаются к вызывающей их
программе только во время ее выполнения. Библиотеки, функции которых
работают во время выполнения программы, называют
библиотеками времени
60
выполнения (
RTL - Run Time Library). Многообразие библиотек
RTL
определяется широким спектром задач, для которых они предназначены, а
также множеством возможных версий одной и той же библиотеки:
- статические или динамические библиотеки;
- 16- или 32-разрядные библиотеки;
- библиотеки для плоской (
f - flat), средней (
m - middle), большой (
l -
large) или других моделей памяти;
- библиотеки с диагностикой или без диагностики;
- библиотеки для однозадачных или мультизадачных приложений.
Формируемые на основе комбинаций признаков варианты библиотек
обладают различными свойствами, предполагающими их применение в той
или иной операционной и технической среде. Актуальные варианты
библиотеки существуют одновременно, менее актуальные можно при
необходимости достаточно быстро генерировать.
Статическая библиотека системы программирования Borland С++
хранится как библиотека объектных модулей, размещенная в
lib-файле.
Необходимые
функции вызываются в программе явно в соответствии с
общими правилами языка программирования и описаниями функций. Вызовы
многих библиотечных функций включает в программу компилятор, они
служат для формирования типовых фрагментов объектных программ.
Правильность вызова функции компилятор проверяет по прототипам
заголовков функций. Прототипы хранятся в заголовочных файлах с
расширением
h, которые включаются в
программу с помощью
препроцессорного оператора
#include.
Динамическая библиотека системы программирования Borland С++
хранится как совокупность функций в форме, подобной загрузочному
модулю, и чаще всего располагается в
dll-файле. Вызов необходимых
функций осуществляется с помощью соответствующих заголовочных файлов
посредством #
include, по аналогии со статической библиотекой. Однако если
в программе не отметить каким-либо особым образом функции динамических
библиотек, то компоновщик будет пытаться обрабатывать ссылки на них как
ссылки на
функции статических библиотек и обнаружит неудовлетворенные
внешние связи. Идентификация запрашиваемых динамических функций
осуществляется следующим образом. Из динамических библиотек
заблаговременно создают особую статическую библиотеку, содержащую
имена и некоторую другую информацию о функциях динамических
библиотек. Такая библиотека называется
библиотекой импорта и хранится в
lib-файле. В Borland С++ заготовлены библиотеки импорта для многих
вариантов динамических библиотек, например
import.lib и
import32.lib для
библиотек Windows. Функция динамической библиотеки, используемая в
программе, называется
импортируемой. Эту же
функцию в самой библиотеке
называют
экспортируемой. Библиотека импорта содержит информацию о
функциях, которые соответствующие динамические библиотеки могут
экспортировать. Обычно библиотеки импорта располагают в одном каталоге
61
со
статическими
библиотеками.
Используя
библиотеки
импорта,
компоновщик формально удовлетворяет в программе внешние ссылки на
функции динамических библиотек и готовит для динамического загрузчика
информацию о
фактически вызываемых функциях. Импортируемые
программой функции можно указать компоновщику другим способом: в
секции импорта особого текстового файла - файла определения модуля с
расширением
def. Загрузочный модуль, оформленный как приложение
Windows
(
В
РЕ-формате), содержит таблицу импорта, специально
предназначенную для динамического загрузчика. Когда программа
запускается, включенные в нее функции статических библиотек выполняются
обычным образом, как части этой программы. Динамически вызываемые
функции могут быть загружены в память либо все одновременно (сразу после
запуска программы), либо по одной (только в
момент вызова в ходе
выполнения программы).
Аналогичный набор библиотек имеется во всех современных системах
программирования.