Cтраница 2
Различные маршруты выполнения вызовов Win32 API. [16] |
В некоторых случаях динамические библиотеки обращаются к другой динамической библиотеке ( ntdll. Этот путь показан на рисунке как шаги 2а и За. Динамическая библиотека может также выполнить всю работу самостоятельно, совсем не обращаясь к системным вызовам. Для других вызовов Win32 API выбирается другой маршрут, а именно: сначала процессу подсистемы Win32 ( csrss. При этом в некоторых случаях подсистема также выполняет всю работу в пространстве пользователя и немедленно возвращает управление. [17]
В некоторых случаях динамические библиотеки обращаются к другой динамической библиотеке ( ntdlldll) которая, в свою очередь, обращается к ядру операционной системы. Этот путь показан на рисунке как шаги 2а и За. Динамическая библиотека может также выполнить всю работу самостоятельно, совсем не обращаясь к системным вызовам. Для других вызовов Win32 API выбирается другой маршрут, а именно: сначала процессу подсистемы Win32 ( csrss. При этом в некоторых случаях подсистема также выполняет всю работу в пространстве пользователя и немедленно возвращает управление. [18]
Перед переходом к рассмотрению пакетов я хочу остановиться на технической стороне динамических библиотек: как они используют память. [19]
Помимо написания библиотеки с функциями и процедурами имеется возможность поместить в динамическую библиотеку всю форму, построенную в Delphi. Ей может быть диалоговое окно или любой тип формы. Она может использоваться не только другими Delphi-программами, но и в других средах разработки или макроязыке, способном использовать динамически подсоединяемые библиотеки. После создания нового проекта-библиотеки все, что надо сделать, - это добавить в проект одну или несколько форм, а затем написать экспортирующие функции, которые будут создавать и использовать эти формы. [20]
В Windows XP спулер печати базируется на 32-разрядных виртуальных драйверах и динамических библиотеках. За счет этого получается единая архитектура функциональных возможностей спулера, позволяющая обеспечить гладкую фоновую печать. [21]
В некоторых языках ( например, Visual Basic) роль интерпретатора выполняет динамическая библиотека. [22]
Чтобы запустить приложение, использующее компонент ClientDataSet, вы должны установить в системе динамическую библиотеку midas. На эту библиотеку ссылается файл DSIntf. Код компонента ClientDataSet не является частью VCL, поэтому в комплекте исходного кода библиотеки VCL этот код отсутствует. [23]
Когда приложение компонуется, компоновщик видит, что некоторые библиотечные процедуры принадлежат к динамическим библиотекам, и записывает эту информацию в заголовок исполняемого файла. Обращения к процедурам динамических библиотек производятся не напрямую, а при помощи вектора передачи в адресном пространстве вызывающего процесса. Изначально этот вектор заполнен нулями, так как адреса вызываемых процедур еще неизвестны. [24]
Если исключение сгенерировано, но в программе не предусмотрена его обработка, механизм исключений вызывает из динамической библиотеки функцию завершения terminate, которая выдает сообщение abnormal program termination и прекращает выполнение программы. [25]
Различные маршруты выполнения вызовов Win32 API. [26] |
Следует также сказать, что на рис. 11.6 показаны три наиболее важные DLL, но они не являются единственными динамическими библиотеками в системе. В каталоге winnt system32 есть более 800 отдельных файлов DLL общим объемом в 130 Мбайт. В конце концов, 29 млн строк исходного текста должны были где-то храниться после компиляции. [27]
После того как вы написали приложение, подобное только что рассмотренному, его можно развернуть в качестве CGI или динамической библиотеки. [28]
Компоненты обработки изображений непосредственно взаимодействуют с прикладной пользовательской программой, а сами, в свою очередь, осуществляют вызовы динамических библиотек средств обработки изображений низкого уровня. Средства обработки изображений низкого уровня взаимодействуют с файловой системой ПК. [29]
Когда во время выполнения приложения осуществляется ссылка на класс, PowerBuilder вначале ищет его в исполняемом файле, затем проверяются динамические библиотеки. [30]