Что такое dll файлы
Что такое DLL файлы и для чего они нужны?
Что такое DLL файлы, и для чего они нужны? Аббревиатура DLL – обозначает «Динамически Подключаемую Библиотеку». Она установлена, во всех операционных системах Windows, и практически каждая программа или игра на компьютере пользуется данной библиотекой. В ней содержится информация о конфигурации системы, совместимости устройств, наборе команд для правильной работы и многое другое. Некоторые файлы для игр имеют в своих папках уже готовые библиотеки, остальные пользуются системными.
Зачем нужны DLL компоненты
Если вкратце: что такое DLL файлы? – это компоненты библиотеки, а нужна она для запуска программ, приложений и игр. Компьютер включился, и система работает исправно. Вы еще ничего не запускали и не открывали, а уже десятки DLL файлов используются. Простые часы, информация о конфигурации системы, порядок запуска программ, оформление и многое другое используют библиотеку. Для того чтобы в текстовом документе начали появляться символы, соответствующие вашему вводу, нужна библиотека. По умолчанию система не знает, что означает нажатая вами клавиша,─ в этом его помогают компоненты DLL. Аналогичная ситуация со всеми подключаемыми устройствами: принтером, мышью, клавиатурой, флеш-картой. Именно библиотека DLL файлов «рассказывает» им, как работать с параметрами вашей системы.
Работоспособность элементов
Важно обновлять периодически систему и библиотеку, неактуальные файлы приведут к отказу работы программы. К примеру, вы установили игры пятилетней и большей давности, они у вас работают нормально. Далее вы поставили новую часть игры, которой не более года. Она может у вас не запуститься. Система выдаст следующее оповещение: ошибка DLL, отсутствует файл. Оно означает, что файлы нерабочие или вовсе его нет на компьютер. Связано это с тем, что программы или игры, которые пользуются библиотекой, могут вносить изменения. К примеру, вы установили игру, но параметры разрядности системы и версию ОС указали неверно.
У нас на сайте, Вы сможете скачать как отдельный DLL, так и весь пакет, в котором будут все файлы обновленные. Найти отсутствующий файл вы можете либо через поиск, либо по первой букве в верхнем меню. Как установить DLL файл и зарегистрировать прочтите в другой статье, где мы описали этот процесс максимально подробно.
Что такое и как использовать файлы dll
В это статье описано, что такое файлы dll, зачем они нужны операционной системе. Вообще dll файлы на сегодняшний день являются неотъемлемой частью множества программ и операционной системы Windows.
Что такое файлы dll
Файлы dll — это файлы динамически подключаемой библиотеки (dynamic-link library). Файлы dll содержат исполняемый код, либо другие данные, требующиеся многим программам непосредственно во время их работы. В этих файлах могут содержаться данные, необходимые как для различных программ, так и для работы операционной системы. Немаловажно, что один dll файл может использоваться несколькими программами сразу.
Теперь давайте попробуем понять, что из себя представляет библиотека. Приведу пример: в папке «System32», расположенной по пути C:\\Windows\\System32 ОС существует файл «Comdlg32». Этот файл необходим множеству программ для создания и использования диалоговых окон. То есть, один файл «Comdlg32.dll» обеспечивает необходимыми ресурсами сразу несколько программ. Dll файлы экономят место на винчестере и обеспечивают более рациональное использование оперативной памяти, так как без прямой нужды программой они не используются.
В библиотеках Windows существуют аналоги dll файлов с другими расширениями. К ним относятся, например, «.ocx», «.cpl» или «.drv».
Использование dll файлов
Dll файлы используются многими программистами для создания модульных программ. В исполняемом exe файле размещаются только самые жизненно необходимые для программы элементы кода, а все остальное помещается в dll файлы. Программа, созданная таким способом будет работать в разы быстрее, потому что dll файлы можно подгружать непосредственно в тот момент, когда они нужны, они не срабатывают при запуске программы. Таким образом они не тратят лишнюю оперативную память.
Обновление созданных таким образом программ проходит проще обычного. Для обновления достаточно внедрить изменения лишь в один dll файл, остальные при этом никак не поменяются и будут работать по-прежнему.
DLL & Python
Недавно меня заинтересовала тема использования DLL из Python. Кроме того было интересно разобраться в их структуре, на тот случай, если придется менять исходники библиотек. После изучения различных ресурсов и примеров на эту тему, стало понятно, что применение динамических библиотек может сильно расширить возможности Python. Собственные цели были достигнуты, а чтобы опыт не был забыт, я решил подвести итог в виде статьи — структурировать свой знания и полезные источники, а заодно ещё лучше разобраться в данной теме.
Под катом вас ожидает статья с различными примерами, исходниками и пояснениями к ним.
Содержание
Надеюсь из содержания немного станет понятнее какую часть нужно открыть, чтобы найти ответы на свои вопросы.
Структура DLL
Учитывая, что статья не о самих библиотеках, лучше просто оставить здесь ссылку на довольно информативную статью от Microsoft: Что такое DLL?.
Для того, чтобы понять, как использовать динамические библиотеки, нужно вникнуть в их структуру.
DLL содержит набор различных функций, которые потом можно использовать по-отдельности. Но также есть возможность дополнительно указать функцию точки входа в библиотеку. Такая функция обычно имеет имя DllMain и вызывается, когда процессы или потоки прикрепляются к DLL или отделяются от неё. Это можно использовать для инициализации различных структур данных или их уничтожения.
Рисунок 1 — Пустой template, предлагаемый Code Blocks для проекта DLL.
На рисунке 1 приведен шаблон, который предлагает Code Blocks, при выборе проекта типа DLL. В представленном шаблоне есть две функции:
DLL_PROCESS_ATTACH – подключение DLL. Процесс проецирования DLL на адресное пространство процесса. С этим значением DllMain вызывается всякий раз, когда какой-то процесс загружает библиотеку с явной или неявной компоновкой.
DLL_PROCESS_DETACH – отключение DLL от адресного пространства процесса. С этим значением DllMain вызывается при отключении библиотеки.
DLL_THREAD_ATTACH – создание процессом, подключившим DLL, нового потока. Зачем DLL знать о каких-то там потоках? А вот зачем, далеко не каждая динамическая библиотека может работать в многопоточной среде.
DLL_THREAD_DETACH – завершение потока, созданного процессом, подключившим DLL. Если динамическая библиотека создает для каждого потока свои «персональные» ресурсы (локальные переменные и буфера), то это уведомление позволяет их своевременно освобождать.
Опять же, в тему структуры DLL можно углубляться до бесконечности, там есть много различных нюансов, о которых немного изложено в этой статье.
У DllMain не так много аргументов, самый важный fdwReason уже рассмотрен выше, теперь о двух других:
О явной и неявной компоновке можно прочесть подробно в статье: Связывание исполняемого файла с библиотекой DLL.
Функции, не объявленные таким образом, нельзя будет вызывать снаружи.
DLL & Python
Первым делом, расскажу, как подключать уже собранные DLL, затем, как вызывать из них функции и передавать аргументы, а уже после этого, постепенно доделаю шаблон из Code Blocks и приведу примеры работы с собственной DLL.
Подключение DLL
Чтобы начать работать с DLL, необходимо подключить библиотеку к программе на Python. Сделать это можно тремя способами:
Код Python:
Результат:
Код Python:
Код Python:
Результат:
Теперь становится понятно, как подключить библиотеку и использовать функции. Однако, не всегда в DLL нужно передавать простые строки или цифры. Бывают случаи, когда требуется передавать указатели на строки, переменные или структуры. Кроме того, функции могут и возвращать структуры, указатели и много другое.
Типы данных в С и Python
Модуль ctypes предоставляет возможность использовать типы данных совместимые с типами в языке С. Ниже приведена таблица соответствия типов данных.
Сtypes type | C type | Python type |
---|---|---|
c_bool | _Bool | bool (1) |
c_char | char | 1-character string |
c_wchar | wchar_t | 1-character unicode string |
c_byte | char | int/long |
c_ubyte | unsigned char | int/long |
c_short | short | int/long |
c_ushort | unsigned short | int/long |
c_int | int | int/long |
c_uint | unsigned int | int/long |
c_long | long | int/long |
c_ulong | unsigned long | int/long |
c_longlong | __int64 or long long | int/long |
c_ulonglong | unsigned __int64 or unsigned long long | int/long |
c_float | float | float |
c_double | double | float |
c_longdouble | long double | float |
c_char_p | char * (NUL terminated) | string or None |
c_wchar_p | wchar_t * (NUL terminated) | unicode or None |
c_void_p | void * | int/long or None |
Первое, что стоит попробовать — это использовать указатели, куда без них? Давайте напишем программу, где создадим строку и указатель на неё, а потом вызовем printf() для них:
Результат:
Аргументы функций и возвращаемые значения
Например, стандартная функция strcat принимает два указателя на строки и возвращает один указатель на новую строку. Давайте попробуем ей воспользоваться.
Код Python:
Результат:
На этом закончим с примерами использования готовых DLL. Давайте попробуем применить знания о структуре DLL и модуле ctypes для того, чтобы собрать и начать использовать собственную библиотеку.
Своя DLL и ее использование
Пример 1
Шаблон DLL уже был рассмотрен выше, а сейчас, когда дело дошло до написания своей DLL и работы с ней, выскочили первые и очевидные грабли — несовместимость разрядности DLL и Python. У меня на ПК установлен Python x64, оказалось, что как бы не были DLL универсальны, разрядность DLL должна соответствовать разрядности Python. То есть, либо ставить компилятор x64 и Python x64, либо и то и то x32. Хорошо, что это не сложно сделать.
Код DLL на С:
Код Python:
Функция SomeFunction получает указатель на строку и выводит её в окно. На рисунке ниже показана работа программы.
Рисунок 2 — Демонстрация работы шаблона библиотеки из Code Blocks.
Рисунок 3 — Действия происходящие при подключении DLL.
Пример 2
Код DLL на С:
В коде main.h определена структура Passport с тремя полями: два указателя и целочисленная переменная. Кроме того, четыре функции объявлены, как экспортируемые.
Код DLL на С:
Внутри кейса DLL_PROCESS_ATTACH происходит выделение памяти под строки и начальная инициализация полей структуры. Выше DllMain определены функции:
GetPassport — вывод полей структуры passport в консоль.
Теперь можно подключить библиотеку в Python.
Код на Python
В коде выше многое уже знакомо, кроме создания структуры аналогичной той, которая объявлена в DLL и передачи указателя на эту структуру из Python в DLL.
DLL-файлы: что такое и почему они важны для компьютера
Файл DLL, сокращение от Dynamic Link Library, представляет собой тип файла, содержащий инструкции, которые другие программы могут вызывать для выполнения определенных действий. Таким образом, несколько программ могут совместно использовать функции, запрограммированные в одном файле, и даже делать это одновременно.
Исправление ошибок DLL
DLL-файлы из-за того, сколько их существует и как часто они используются, как правило, находятся в центре большого процента ошибок, возникающих при запуске, использовании и завершении работы Windows.
Хотя может быть просто нужно загрузить этот отсутствующий или не найденный файл DLL, – это редко лучший способ. В целом, мы противники загрузки отдельных DLL-файлов, но это тема для отдельной статьи. В качестве примера можете почитать: инъекция кода в систему Windows – как это осуществляется.
Если вы получили ошибку DLL, лучше всего найти информацию об устранении неполадок, относящуюся к этой проблеме DLL, чтобы решить её правильно и навсегда. Например: руководство по устранению ошибок с файлом Mfc110u.dll в Windows
Подробнее о DLL-файлах
Слово «динамический» в Dynamic Link Library используется потому, что данные используются в программе только тогда, когда программа активно их запрашивает, вместо того, чтобы оставлять данные всегда доступными в памяти.
По умолчанию в Windows доступно множество DLL-файлов, но сторонние программы также могут их устанавливать. Тем не менее, открывать файл DLL приходится редко, потому что, на самом деле, нет необходимости редактировать его, плюс это может вызвать проблемы с программами и другими DLL.
Файлы DLL полезны, потому что они могут позволить программе разделить её различные компоненты на уникальные модули, которые затем могут быть добавлены или удалены для включения или исключения определенных функций. Когда программное обеспечение работает таким образом с DLL, программа может использовать меньше памяти, потому что ей не нужно загружать всё сразу.
Кроме того, библиотеки DLL позволяют обновлять части программы без необходимости перестраивать или переустанавливать всю программу целиком. Преимущество усиливается, когда DLL использует несколько программ, потому что все приложения могут затем использовать обновление из этого единственного файла DLL.
Элементы управления ActiveX, файлы панели управления и драйверы устройств – это некоторые из файлов, которые Windows использует в качестве динамических библиотек. Соответственно, эти файлы используют расширение файлов OCX, CPL и DRV.
Когда DLL использует инструкции из другой DLL, эта первая DLL зависит от второй. Это «облегчает» нарушение функциональности библиотек DLL, потому что вместо сбоя только первой библиотеки DLL возникает каскад проблем.
Если зависимая DLL обновляется до более новой версии, перезаписывается более старой версией или удаляется с компьютера, программа, использующая файл DLL, может перестать работать должным образом.
Ресурсные библиотеки DLL – это файлы данных, которые имеют тот же формат, что и библиотеки DLL, но используют расширения файлов ICL, FON и FOT. Файлы ICL – это библиотеки значков, а файлы FONT и FOT – файлы шрифтов.
Что такое dll файл, и почему их часто не хватает в Windows?
Что такое dll файл?
DLL файл — файл динамически подключаемой библиотеки (библиотеки динамической ссылки)- некий набор кодов и данных для выполнения в Windows конкретного действия в рамках файлу отведённых. К dll-кам часто обращаются приложения (как сторонние так и внутренние — от имени Windows) в конкретный момент и часто на определённый срок. Тяжеловесные приложения (опять же игры) часто сами вместе с установкой пополняют хранилище dll файлов, так как система ими по умолчанию не обладает. Таким образом по типу действия dll файлы чем-то напоминают исполнительные файлы .exe, (и те и другие используют один формат файлов Portable Executable — PE) кроме некоторых моментов:
Вообще, dll-лки — прерогатива Windows, которая сама частично состоит именно из этих файлов («пингвинятники» в Линукс имеют дело с аналогичными файлами с расширением .so), активно используя COM компоненты и библиотеки .NET. В этом легко убедиться, совершив экскурс в системную папку system32 (в 64-х битных версиях это ещё и папка C:\Windows\SysWOW64):
Как работает dll файл?
Так, открывая или сворачивая окна, натыкаясь на ошибки, переустанавливая оборудование в системе, наводя курсор и видя всплывающие подсказки, мы часто натыкаемся на бесчисленное (как нам кажется) множество диалоговых и просто справочных окон, которые в Windows становятся всё догадливее. И часто просто не обращаем на это внимание. Такие сообщения, например, и есть плод перекрещивающейся работы dll-файлов Windows.
Любая устанавливаемая в Windows программа всегда использует либо свои немногочисленные или имеющиеся в системе dll-ки. Программа обычно загружает свою dll-ку во время автозагрузки через специальную библиотеку Win32 API LoadLibrary или по сигналу с другого dll-файла. Обычно это выглядит так:
К СВЕДЕНИЮ
попытка снять с регистрации файл для последующей правильной его установки в реестре провалилась
Этот вопрос абсолютно аналогичен вопросу, рассматриваемому в статье «DirectX — для каждой игры свой?» Так что давайте поэтапно, если в системе возникли вопросы по поводу пропажи или повреждения dll. Так вот, основные «неполадки» вокруг проблем с dll-ками крутятся вокруг таких вариантов развития событий:
Почему нельзя просто его скачать?
Ещё один вариант — в ответ на ваш запрос вы наткнётесь на чаще всего платную, но очень навязчивую и красочную программу по ремонту системных файлов, функции которой крайне бедны (даже если запущенный после её установки «анализ» показал, что в системе «ну всё очень плохо!»).
Но да ладно: скачали, вирусов нет… На популярном и наиболее часто используемом в этих случаях ресурсе:
Напоследок, но крайне важно. С ручным расположением dll всё немного сложнее. Эта тема достойна отдельной статьи, и она связана с функцией Перенаправителя файловой системы File System Redirector. Краткий совет же такой — переустановите службу или программу, но старайтесь избегать прямого вмешательства в директорию С:\Windows\.
Подход к попытке исправить возникшую ошибку зависит именно от самостоятельной диагностики вероятных причин. О них вы знаете из предыдущего абзаца. А значит:
Прокатывает не всегда, ибо это инструмент общего действия. Однако попробовать стоит. Внутри побитого файла она ничего изменить не сможет, но системные файлы могут быть подменены. Однако, если задет файл конкретной программы, утилита отрапортует, что всё хорошо и захлопнется. Оставив вас ни с чем.
Советов здесь немного, и главный из них должен решаться ещё на этапе установки машины. Старайтесь не смешивать типы файловых систем самой машины и носителей для них и не разносите по разным томам папку с программой и носителями для неё.