Операционные системы. Учебное пособие. Марапулец Ю.В. - 36 стр.

UptoLike

Составители: 

гибкой. Структура DLL-модуля практически такая же, как и ЕХЕ-модуля. Динамическая
библиотека это еще и возможность разработки приложений на разных языках. Динами-
ческая библиотека, написанная, скажем, на Visual C++, может вызываться из программ,
написанных на любых языках. Следует также отметить, что использование динамиче-
ских библиотек экономит дисковое пространство, т. к. процедура из такой библиотеки
помещается в модуль лишь один раз, в отличие от процедур, помещаемых в модули из
статических библиотек.
Динамическая библиотека проецируется на адресное пространство вызывающего
процесса. В результате она становится частью этого процесса. Если динамическая биб-
лиотека резервирует динамическую память, то этот блок памяти принадлежит процессу.
При удалении библиотеки из памяти блок остается и удаляется только процессом.
При создании DLL необходимо указывать экспортируемые функции. Делается это
следующим образом [7]:
_declspec(dllexport)int Func(char * s);
В программе, вызывающей эту функцию, следует ввести следующую строку:
_declspec(dllimport) int Func(char * s);
Для дальнейшего изучения DLL введем понятие связывание. Во время трансляции
связываются имена, указанные в программе как внешние с соответствующими именами
из библиотек. Такое связывание называется ранним (или статическим). Напротив, в слу-
чае с динамической библиотекой связывание происходит во время выполнения модуля.
Такое связывание называется поздним (или динамическим). При этом позднее связыва-
ние может происходить в автоматическом режиме в начале запуска программы и при
помощи специальных API-функций (см. ниже) по желанию программиста. При этом го-
ворят о явном и неявном связывании (рис.1.2).
Трансляция Время выполнения
Исполняемый модуль
Рис.1.2. Иллюстрация механизма связывания
В среде Windows практикуются два механизма связывания: по символьным и по-
рядковым номерам. В первом случае функция, определенная в динамической библиоте-
ке, идентифицируется по ее имени, во втором - по порядковому.
Динамическая библиотека может содержать ресурсы. Так, файлы шрифтов пред-
ставляют собой динамические библиотеки, единственным содержимым которых явля-
ются ресурсы. Надо сказать, что динамическая библиотека как бы становится продолже-
нием вашей программы, загружаясь в адресное пространство процесса. Соответственно,
Статические
библиотеки
Динамические
библиотеки
Раннее
связывание
Позднее
неявное
связывание
Позднее
явное
связывание
38
гибкой. Структура DLL-модуля практически такая же, как и ЕХЕ-модуля. Динамическая
библиотека это еще и возможность разработки приложений на разных языках. Динами-
ческая библиотека, написанная, скажем, на Visual C++, может вызываться из программ,
написанных на любых языках. Следует также отметить, что использование динамиче-
ских библиотек экономит дисковое пространство, т. к. процедура из такой библиотеки
помещается в модуль лишь один раз, в отличие от процедур, помещаемых в модули из
статических библиотек.
     Динамическая библиотека проецируется на адресное пространство вызывающего
процесса. В результате она становится частью этого процесса. Если динамическая биб-
лиотека резервирует динамическую память, то этот блок памяти принадлежит процессу.
При удалении библиотеки из памяти блок остается и удаляется только процессом.
     При создании DLL необходимо указывать экспортируемые функции. Делается это
следующим образом [7]:
_declspec(dllexport)int Func(char * s);
В программе, вызывающей эту функцию, следует ввести следующую строку:
_declspec(dllimport) int Func(char * s);
      Для дальнейшего изучения DLL введем понятие связывание. Во время трансляции
связываются имена, указанные в программе как внешние с соответствующими именами
из библиотек. Такое связывание называется ранним (или статическим). Напротив, в слу-
чае с динамической библиотекой связывание происходит во время выполнения модуля.
Такое связывание называется поздним (или динамическим). При этом позднее связыва-
ние может происходить в автоматическом режиме в начале запуска программы и при
помощи специальных API-функций (см. ниже) по желанию программиста. При этом го-
ворят о явном и неявном связывании (рис.1.2).
       Трансляция                                         Время выполнения

                               Исполняемый модуль

                                                                          Позднее
                 Раннее                        Позднее                    явное
                 связывание                    неявное                    связывание
                                               связывание



         Статические                                       Динамические
         библиотеки                                        библиотеки

                           Рис.1.2. Иллюстрация механизма связывания

      В среде Windows практикуются два механизма связывания: по символьным и по-
рядковым номерам. В первом случае функция, определенная в динамической библиоте-
ке, идентифицируется по ее имени, во втором - по порядковому.
      Динамическая библиотека может содержать ресурсы. Так, файлы шрифтов пред-
ставляют собой динамические библиотеки, единственным содержимым которых явля-
ются ресурсы. Надо сказать, что динамическая библиотека как бы становится продолже-
нием вашей программы, загружаясь в адресное пространство процесса. Соответственно,



                                              38