Что такое файлы *.dll и *.ocx, и как их зарегистрировать? Устраняем ошибки связанные с dll.

19.07.2019

И IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. В мире UNIX аналогичные функции выполняют т. н. shared objects («разделяемые объекты»).

Формат файлов DLL придерживается тех же соглашений, что и формат исполняемых файлов, сочетая код, таблицы и ресурсы.

Цели введения DLL

Первоначально предполагалось, что введение DLL позволит эффективно организовать память и дисковое пространство, используя только один экземпляр библиотечного модуля для различных приложений. Это было особенно важно для ранних версий Microsoft Windows с жёсткими ограничениями по памяти.

Далее, предполагалось улучшить эффективность разработок и использования системных средств за счёт модульности. Замена DLL-программ с одной версии на другую должна была позволить независимо наращивать систему, не затрагивая приложений. Кроме того, библиотеки DLL могли использоваться разнотипными приложениями - например, Microsoft Office, Microsoft Visual Studio и т. п.

В дальнейшем идея модульности выросла в концепцию COM.

Фактически, полных преимуществ от внедрения DLL получить не удалось по причине явления, называемого DLL hell («ад DLL»). DLL Hell возникает, когда несколько приложений требуют одновременно различные, не полностью совместимые, версии DLL-библиотек, что приводит к сбоям в этих приложениях. Когда система выросла до определённых размеров, количество DLL стало превышать многие тысячи, не все из них обладали полной надёжностью и совместимостью, и конфликты типа DLL Hell стали возникать очень часто, резко понижая общую надёжность системы. Поздние версии Microsoft Windows стали разрешать параллельное использование разных версий DLL, что свело на нет преимущества изначального принципа модульности. Использование разных версий Dll стало возможным благодаря файлу манифеста (manifest), который хранится в ресурсах приложения или в виде отдельного файла в одном с приложением каталоге.

Примеры использования DLL в разных языках

Экспорт в DLL

Delphi

library Example; { Производим некие действия и возвращаем результат } function AddNumbers(a, b: Double): Double; cdecl; begin AddNumbers:= a + b end; { Эта функция экспортируется } exports AddNumbers; { Инициализатор DLL, аналог функции main() в языках C и C++ } begin end.

C и C++

#include #define DLLEXPORT extern "C" __declspec(dllexport) // extern "C" обозначает использование простой генерации // сигнатуры функции (в стиле языка С) при получении объектных // файлов. В частности, это запрещает компилятору C++ // производить "декорацию" (или "украшение") имени функции // дополнительными символами при экспорте в DLL /* Эта функция экспортируется */ DLLEXPORT double AddNumbers(double a, double b) // Прототип функции (функция без тела). По данной заявленной сигнатуре функции поиск её тела // при линковке будет произведён ниже или в другом бинарном файле; /* Инициализационная функция DLL, аналог main() */ bool APIENTRY DllMain(HANDLE hModule, DWORD dwReason, LPVOID lpReserved) { return TRUE; } /* Тело (реализация) заявленного выше прототипа функции. Производит некие действия и возвращает результат */ DLLEXPORT double AddNumbers(double a, double b) { return a + b; }

Импорт из DLL

Delphi

program Example; {$APPTYPE CONSOLE} { Указываем, что функция находится в DLL } function AddNumbers(a, b: Double): Double; cdecl; external "Example.dll"; { Используем функцию как обычно } var result: Double; begin result:= AddNumbers(1, 2); Writeln("The result was: ", result) end.

C и C++

#include /* * Указываем, что тело функции находится в другом файле. * Не забыть про объектный модуль DLL при линковке! */ extern "C" __declspec(dllimport)double AddNumbers(double a, double b); /* Используем функцию как обычно */ int main(int argc, char **argv) { double result = AddNumbers(1, 2); printf("The result was: %f\n", result); return 0; }

Подгрузка и импорт из DLL во время работы

Delphi

program Example; {$APPTYPE CONSOLE} var result: Double; LibHandle: Hmodule; AddNumbers: function(a, b: Double): Double; begin LibHandle:= LoadLibrary("Example.dll"); // загружаем DLL if LibHandle <> 0 then begin @AddNumbers:= GetProcAddress(LibHandle, "AddNumbers"); // запоминаем адрес // необходимой функции if @AddNumbers <> nil then begin result:= AddNumbers(1, 2); // используем функцию Writeln("The result was: ", result); end; FreeLibrary(LibHandle); // выгружаем DLL end; end.

C и C++

#include #include /* * Тип используемой функции * (комбинация типов параметры и возвращаемого значения) */ typedef double (*importFunction)(double, double); int main(int argc, char **argv) { importFunction addNumbers; double result; /* Загружаем DLL в память */ HINSTANCE hinstLib = LoadLibrary("Example.dll"); if (hinstLib == NULL) { printf("ERROR: unable to load DLL\n"); return 1; } /* Получаем указатель на функцию */ addNumbers = (importFunction)GetProcAddress(hinstLib, "AddNumbers"); if (addNumbers == NULL) { printf("ERROR: unable to find DLL function\n"); return 1; } /* Вызываем функцию через указатель */ result = addNumbers(1, 2); /* * Выгружаем DLL (в принципе, это будет сделано * автоматически при выходе из программы) */ FreeLibrary(hinstLib); /* Отображаем результат */ printf("The result was: %f\n", result); return 0; }

Уязвимости в механизмах DLL

Уязвимость заключается в том, что многие программы при вызове функции LoadLibrary() не проверяют корректность пути, по которому эта библиотека может быть загружена. Таким образом, они позволяют произвести подмену выполняемой библиотеки. Это связано с тем, что поиск загружаемой библиотеки осуществляется в первую очередь в директории, содержащей образ исполняемого файла, который породил процесс (подмененная библиотека выполняется с привилегиями пользователя, запустившего процесс).

DLL – аббревиатура от Dynamic Link Library («динамически подключаемая библиотека» с англ.). Динамическая библиотека ресурсов и подпрограмм позволяет использовать ранее написанные модули многократно. Файл-библиотека может включать в себя, например, процедуры, иконки. Необходима она для работы операционных систем Windows.

Библиотекой в программировании называется сборник программ, к которым можно обращаться при разработке ПО. Набор маленьких программ динамически включается в большую при вызове как составная часть. Преимущество DLL-файла в том, что он не занимает ОЗУ, а подгружается при необходимости во время работы (Run-time), что позволяет существенно экономить оперативную память. DLL-программа может работать с устройствами: принтером, сканером. При работе с текстом в MS Word нет необходимости в постоянном присутствии DLL-принтера. Если документ распечатывается, то MS Word обращается к динамической библиотеке и вызывает соответствующую DLL-программу для принтера.


Набор динамических подпрограмм может одновременно использоваться в нескольких работающих программах – это еще один плюс. Именно поэтому они еще носят название «библиотека общего пользования». Суть в том, что в ОЗУ загружается только одна копия динамической библиотеки, а обращаются к ней все активные в данный момент программы. Что тоже ведет к экономии ресурса ОЗУ. Кроме критически-необходимых подпрограмм в библиотеке DLL хранятся дополнительные функции. Их можно использовать как плагин (Plug-ins), умножая тем самым функциональность программы. Отсутствие нужного модуля в библиотеке DLL делает работу основной программы невозможной. Это отрицательное качество динамической библиотеки.


Файлы из динамической библиотеки имеют стандартное расширение в каждой операционной системе: в OS/2 и MS Windows – «.dll»; Mac OS - «.dylib»; UNIX – «.so». Хранятся такие файлы в определенном месте. Например, в «System32». Программист при написании приложения указывает имя нужной функции и имя библиотеки, в которой она находится. Сам код подпрограммы в исходном тексте не пишется, что существенно упрощает процесс программирования. Этот принцип основан на популярном ранее модульном кодинге. Простые программы оформлялись как отдельные модули, что позволяло не писать их каждый раз заново, а включать в код новой программы в готовом виде – откомпилированный модуль.


Кроме исполняемого кода процедур и функций в динамической библиотеке можно хранить графические и видео файлы. Их использование позволяет экономить не только ОЗУ, но и дисковое пространство. Многочисленные достоинства DLL библиотеки не уменьшает один недостаток – на загрузку модулей требуется дополнительное время. Преимущества же их очевидны, поэтому повсеместно используются программистами практически в каждой программе.


Будьте очень внимательны при работе: никогда не меняйте расширение «.dll» на иное, не переносите эти файлы в другую папку. Если файлу присвоить суффикс «.dll», то это не изменит его тип. Для конвертирования требуется специальное приложение. Чаще всего ошибки в работе Windows связаны именно с отсутствием нужного файла «.dll».

Что такое DLL файлы, и для чего они нужны? Аббревиатура DLL – обозначает «Динамически Подключаемую Библиотеку». Она установлена, во всех операционных системах Windows, и практически каждая программа или игра на компьютере пользуется данной библиотекой. В ней содержится информация о конфигурации системы, совместимости устройств, наборе команд для правильной работы и многое другое. Некоторые файлы для игр имеют в своих папках уже готовые библиотеки, остальные пользуются системными.

Зачем нужны DLL компоненты

Если вкратце: что такое DLL файлы? – это компоненты библиотеки, а нужна она для запуска программ, приложений и игр. Компьютер включился, и система работает исправно. Вы еще ничего не запускали и не открывали, а уже десятки DLL файлов используются. Простые часы, информация о конфигурации системы, порядок запуска программ, оформление и многое другое используют библиотеку. Для того чтобы в текстовом документе начали появляться символы, соответствующие вашему вводу, нужна библиотека. По умолчанию система не знает, что означает нажатая вами клавиша,─ в этом его помогают компоненты DLL. Аналогичная ситуация со всеми подключаемыми устройствами: принтером, мышью, клавиатурой, флеш-картой. Именно библиотека DLL файлов «рассказывает» им, как работать с параметрами вашей системы.

Работоспособность элементов

Важно обновлять периодически систему и библиотеку, неактуальные файлы приведут к отказу работы программы. К примеру, вы установили игры пятилетней и большей давности, они у вас работают нормально. Далее вы поставили новую часть игры, которой не более года. Она может у вас не запуститься. Система выдаст следующее оповещение: ошибка DLL, отсутствует файл. Оно означает, что файлы нерабочие или вовсе его нет на компьютер. Связано это с тем, что программы или игры, которые пользуются библиотекой, могут вносить изменения. К примеру, вы установили игру, но параметры разрядности системы и версию ОС указали неверно.

Текущие файлы будут перезаписаны, и программа работать перестанет. Раз отсутствует DLL, значит, его нужно скачать и поместить в систему вручную. Но в большинстве случаев, новые игры требуют новых файлов, которых вообще не было в старых сборках системы, и решение одно - установить или обновить весь пакет.

У нас на сайте, Вы сможете скачать как отдельный DLL, так и весь пакет, в котором будут все файлы обновленные. Найти отсутствующий файл вы можете либо через поиск, либо по первой букве в верхнем меню. Как установить DLL файл и зарегистрировать прочтите в другой статье, где мы описали этот процесс максимально подробно.

Файлы формата DLL открываются специальными программами. Существует 2 типа форматов DLL, каждый из которых открывается разными программами. Чтобы открыть нужный тип формата, изучите описания файлов и скачайте одну из предложенных программ.

Чем открыть файл в формате DLL

Найти и установить любую недостающую или поврежденную DLL библиотеку поможет программа HELPER.DLL .

В файлах формата DLL содержатся настройки ссылки на различные ресурсы, используемые программой, например, иконки. DLL предназначены исключительно для ОС Windows. На других операционных системах открыть такие файлы можно только с помощью эмуляторов (исключением являются кроссплатформенные приложения для Mac OS). Нужно помнить, что современные программы не поддерживают файлы для 16-ти битной архитектуры.

Меры предосторожности

В большинстве случаев пользователю не требуется открывать файлы формата DLL, поскольку они предназначены исключительно для разработчиков. Редактирование данного файла может негативно сказаться на работоспособности отдельных программ и операционной системы, по этой причине нужно найти файл Dll и сделать его копию.

Программы для открытия файлов DLL

Просмотр исходного кода

Одним из самых распространенных способов, чтобы просмотреть расширение Dll, является . Программа имеет встроенные функции декомпиляции некоторых файлов, поэтому можно заниматься отладкой dll, а главное, она полностью бесплатна. Разумеется, гарантировать корректное отображение кода для всех файлов невозможно.

В качестве альтернативы можно использовать декомпилятор dotPeek . Он также бесплатен, однако способен работать исключительно с программами, написанными на C#.

Настройка интерфейса программы

Для этой цели лучше всего подходит . С помощью данной программы можно легко сменить иконки, диалоги или установить собственную анимацию. К сожалению, программа является платной даже для некоммерческого использования. Следует обратить внимание, что могут возникнуть проблемы с файлами больших размеров (около 1 ГБ и более).

Отладка

Самым простым способом является использование Visual Studio от Microsoft. Это довольно функциональный инструмент, в число возможностей которого входит отладка программы, но поможет он только в случае, если на файле нет защиты.

Если же нужно просто скачать DLL взамен битого файла (или отсутствует Dll), то здесь поможет DLL-helper - полностью бесплатная программа.

Динамические web-страницы

Существует и другой формат DLL - файлы, генерирующие код для сайтов. Такие библиотеки можно открыть в любой удобной среде разработки, например, Visual Studio . Протестировать их в действии поможет браузер. Лучше использовать последние версии популярных обозревателей, в противном случае файл может отображаться некорректно.

Веб-страница, автоматически создающаяся во время доступа пользователя. Может объединять серверные сценарии, такие как Perl или , создающие -код для веб-страниц.

Веб-страницы в файлах расширения DLL чаще всего хранятся на веб-серверах Microsoft IIS. Расширение DLL должно отображаться на соответствующем механизме создания сценариев сервера для корректной обработки страницы.

Файл компилированной библиотеки, содержащий набор процедур и/или драйверов, на которые ссылается и которые выполняются программой. Позволяет различным программам получать доступ к общедоступным системным функциям посредством стандартных библиотек. Может динамически связываться в программе во время ее работы.

Многие файлы DLL(читается ДЛЛ) предоставляются операционной системой Windows, другие входят в состав программ Windows. Они также предоставляют различные программные функции, такие как соединение с внешними устройствами и входным и выходным сигналом жесткого диска. На них также могут ссылаться кросс-платформенные приложения для Mac.

Примечание: удаление или изменение содержимого файла DLL может стать причиной ошибок в работе программы, которая ссылается на файл. Поэтому файлы DLL не стоит открывать или редактировать.

Часто задаваемые вопросы

  1. Откройте zip-файл, скачанный с сайт.
  2. Извлеките DLL-файл в любое место на компьютере.
    • Далее мы советуем вам поместить файл в папку той программы, которая запрашивает данный файл. Убедитесь, что вы используете 32-разрядный формат DLL-файла для 32-разрядной программы, а 64-разрядный формат DLL-файла для 64-разрядной программы, иначе может возникнуть ошибка 0xc000007b.
  3. Если вышеописанные действия не решат вашу проблему, поместите файл в системную папку. По умолчанию эта папка находится здесь:
    • C:\Windows\System (Windows 95/98/Me),
      C:\WINNT\System32 (Windows NT/2000), or
      C:\Windows\System32 (Windows XP, Vista, 7, 8, 8.1, 10).
  4. В 64-разрядной версии Windows папка для 32-разрядных DLL-файлов по умолчанию расположена здесь:

C:\Windows\SysWOW64\ , а для 64-разрядных DLL-файлов
C:\Windows\System32\ .

Обязательно перезапишите все существующие файлы (но сохраните резервную копию оригинального файла).

Перезагрузите компьютер.

Если это не устранило проблему, попробуйте выполнить следующие действия, чтобы занести файл в реестр:

Для 32-разрядных DLL-файлов в 32-разрядных версиях Windows и для 64-разрядных DLL-файлов в 64-разрядных Windows:

  1. Откройте командную строку с повышенными правами.
    • Для этого нажмите Пуск, Все программы, выберите Стандартные, кликните правой кнопкой мышки по Командной Строке, далее нажмите «Запуск от имени администратора».
    • Если вас просят ввести пароль администратора или подтвердить, то введите пароль или нажмите «Разрешить».
  2. Далее введите regsvr32 "filename".dll и нажмите Enter.

Занесение в реестр 32-разрядных DLL-файлов в 64-разрядной версии Windows:

  1. Откройте командную строку с повышенными правами, выполнив вышеописанные действия.
    • cd c:\windows\syswow64\
  2. Далее введите следующее и нажмите Enter:
    • regsvr32 c:\windows\syswow64\"filename".dll

DLL файлы это динамические библиотеки, которыми пользуется множество программ на вашем ПК. В момент удаления или обновления одной из программ с ПК может получится так, что ранее установленные в операционной системе файлы DLL могут удалиться по ошибке. Кроме такой ситуации очень часто система не может обнаружить DLL из-за вирусов, нелицензионного программного обеспечения, которые безусловно накладывают негативный след от своего пребывания на компьютере.

Очень часто файлы DLL пропадают из-за разрыва связей программы и операционной системы в случаях, когда пользватель в ручном режиме переносит программу из одной папки в другую. Только автоматические и системные средства удаления и установки программ на ПК могут обеспечить максимально комфортное использование компьютера и операционной системы.

Dynamic-link library

DLL (англ. Dynamic-link library) - динамическая библиотека

DLL (англ. Dynamic-link library) — понятие операционной системы Microsoft Windows, динамическая библиотека, позволяющая многократное применение различными программными приложениями, понятие операционной системы Microsoft Windows. K DLL относятся также элементы управления ActiveX и драйверы.

Формат файлов DLL придерживается тех же соглашений, что и формат исполняемых файлов EXE, сочетая коды, таблицы и ресурсы.

Цели введения DLL

Первоначально предполагалось, что введение DLL позволит эффективно организовать память и дисковое пространство, используя только одну инстанцию библиотечных модулей для многих приложений. Это было особенно важно для ранних версий Microsoft Windows с жёсткими ограничениями по памяти.

Далее, предполагалось улучшить эффективность разработок и использования системных средств за счёт модульности. Замена DLL-программ с одной версии на другую должна была позволить независимо наращивать систему, не затрагивая приложений. Кроме того библиотеки DLL могли использоваться разнотипными приложениями — например, Microsoft Office, Microsoft Visual Studio и т.п.

В дальнейшем идея модульности выросла в концепцию ActiveX-контролей.

Фактически полных преимуществ от внедрения DLL получить не удалось по причине явления, называемого DLL hell (DLL-евский кошмар). DLL hell возникает, когда несколько приложений требуют одновременно различных версий DLL-библиотек по причине их неполной совместимости, что приводит к серьёзным конфликтам. Когда система выросла до определённых размеров, количество DLL стало превышать многие тысячи, не все из них обладали полной надёжностью и совместимостью, и конфликты типа DLL hell стали возникать очень часто, резко понижая общую надёжность системы. Поздние версии Microsoft Windows стали разрешать параллельное использование разных версий DLL, что свело на нет преимущества изначального принципа модульности.

Похожие статьи