Замечание
Но это не означает, что если переименовать DLL-файл, то он станет исполняемым имеется в виду заголовочная информация файла
Для загрузки операционной системы необходимо запустить файл win com, имеющий размер всего 25 Кбайт Как легко догадаться, в файл такого размера невозможно поместить код, реализующий всю ту гигантскую работу, которая производится по ходу выполнения любого приложения Этот файл является загрузчиком ядра операционной системы, физически размещенным в нескольких DLL-файлах.
Помимо кода, DLL-файлы могут хранить данные и ресурсы. Например, при изменении значка (ярлыка) пользователю предлагается на выбор набор значков из файла SHELL32. DLL.
Как мы уже знаем, для создания любой программы Windows, имеющей собственное окно, в проекте необходимо подключать как минимум два модуля' windows и Messages Первый из этих файлов содержит прототипы функций API и GDI Посмотрим на прототип одной из них:
function CreateDC;
external gdi32 name 'CreateDCA';
Здесь величина gdi32 - константа, описанная в этом же модуле'
const
gdi32 = 'gdi32. dll';
Таким образом, функция CreateDC физически размешена в файле gdi32 dll и каждое приложение, использующее функции GDI, обращается к этой библиотеке.
Приблизительно так же выглядят прототипы остальных функций и процедур, но указываемые в прототипе имена библиотек индивидуальны для каждой из них.
Обратите внимание, что в этом же файле находится описание константы opengl32 Использование DLL, в частности, позволяет операционной системе экономить память.
Приложение не умеет ни создавать окно, ни выводить в него информацию и не содержит кода для этих действий. Все запущенные приложения (клиенты) передают соответствующие команды файлу gdi32. dll (серверу), который отрабатывает их, осуществляя вывод на устройство, ссылку на контекст которого передается в качестве первого аргумента функции. При этом клиентов обслуживает единственная копия сервера в памяти. Помимо важности DLL как основы программной архитектуры операционной системы, представление о динамических библиотеках необходимо иметь каждому разработчику программных систем. Многие программные системы строятся по следующему принципу: основной код и данные размещаются в динамических библиотеках, а исполняемому файлу отводится роль загрузчика. Подробнее о такой организации мы поговорим в главе 5. Библиотека OpenGL физически также размещена в виде двух DLL-файлов: opengl23. dll и glu32. dll. Первый из этих файлов и есть собственно библиотека OpenGL. Назначение его - осуществление взаимодействия с акселератором или программная эмуляция ускорителя за счет центрального процессора. Поддержка ЗD-акселерации осуществляется с помощью полного (устанавливаемого) клиентского драйвера (Installable Client Driver, ICD) и мини-драйвера (Mini-Client Driver, MCD).
Библиотека OpenGL реализована по клиент-серверной схеме, т. e. ее одновременно может использовать несколько приложений при единственной копии сервера в памяти или вообще при удаленном расположении сервера (сервер в принципе может располагаться и не на компьютере клиента). Иногда программисту, как, например, в случае с OpenGL, бывает необходимо просмотреть список функций и процедур, размещенных в конкретном файле DLL. Для этого можно воспользоваться либо утилитой быстрого просмотра, поставляемой в составе операционной системы, либо утилитой tdump. exe, поставляемой в составе Delphi.
Для вызова утилиты быстрого просмотра установите курсор мыши на значок нужного файла и нажмите правую кнопку. В появившемся меню должен присутствовать пункт "Быстрый просмотр", если этого пункта нет, то требуется установить компонент операционной системы "Быстрый просмотр". Для использования утилиты tdump скопируйте ее и необходимый dll-файл в отдельный каталог. Запустите его с параметрами <имя анализируемого файла> и <имя файла-результата>, например:
TDUMP. EXE opengl32. dll opengl. txt
В файле opengl. txt будет выдана информация, извлеченная утилитой из заголовка библиотеки, аналогичная той, что выводится утилитой быстрого просмотра. Информация группируется по секциям, среди которых наиболее
часто программисту требуется секция экспортируемых функций для уточнения содержимого библиотеки.
Итак, чаще всего DLL представляет собой набор функций и процедур. Как говорится в справке Delphi по DLL, "динамические библиотеки являются идеалом для многоязыковых проектов". Это действительно так: при использовании OpenGL совершенно безразлично, в какой среде созданы сама библиотека и вызывающие ее модули.