Работа с библиотеками динамической компоновки (DLL). Примеры использования DLL в разных языках. Подгрузка и импорт из DLL во время работы

Иногда при запуске какой-либо программы появляется сообщение, что не найден файл *.dll (например, VCompLib.dll) или *.ocx (например, seon.ocx). При этом программа, естественно, не запускается.

Сообщения об ошибках могут быть разные (это зависит в основном от того, на каком языке написана программа), например: «Component "MSCOMM32.OCX" not correctly registered: file is missing or invalid» , или «Приложению не удалось запуститься, поскольку MSVBVM50.DLL не был найден. Повторная установка приложения может исправить эту проблему» , или «Runtime DLL/OCX File error» . При этом в Windows Vista дополнительно появится окно Помощника по совместимости программ с сообщением Эта программа требует отсутствующий компонент Windows .

Краткая справка

· DLL (от англ. Dynamic-L ink L ibrary динамически подключаемая библиотека) понятие операционной системы Microsoft Windows ; динамическая библиотека, позволяющая многократное применение различными программнымиприложениями. K DLL иногда причисляют также элементы управления ActiveX и . В мире UNIX аналогичные функции выполняют так называемые shared objects («разделяемые объекты»). Формат файлов *.dll придерживается тех жесоглашений, что и формат исполняемых файлов *.exe , сочетая код, таблицы и ресурсы.

·ActiveX название группы технологий, разработанных Microsoft для программирования компонентных объектных приложений на основе модели COM .

·COM (сокр. от англ. Component Object Model ) модель компонентных объектов Microsoft , стандартный механизм, включающий интерфейсы, с помощью которых одни объекты предоставляют свои сервисы другим; являетсяосновой многих объектных технологий, в том числе OLE и ActiveX ).

·OLE (сокр. от англ. Object Linking and Embedding ) общее название (до 1996 г.) группы объектно-ориентированных технологий Microsoft на основе COM (OLE 1, OLE 2, OLE automation , OLE Database и др.).

· ActiveX control управляющий элемент ActiveX ; введенное в 1996 г. Microsoft новое название независимых программируемых компонентов, ранее называемых OLE controls , OCXs , OLE custom controls ; в отличие от последнихпозволяют работать с Internet .

· OCX (сокр. от англ. OLE Custom eXtension ) перемещаемые элементы управления, OLE custom control , OLE control . можно сказать, что файлы *.ocx это элементы управления ActiveX , выполняющие примерно те жефункции, что и файлы *.dll .

· OLE custom control специализированный управляющий элемент OLE , OLE control .

·OLE control управляющие элементы OLE , программируемые компоненты-приложения с интерфейсом на базе OLE , позволяющим легко включать их в другие приложения; c 1996 г. называются ActiveX control . Синонимы: OCX , OLEcustom control .

Способы решения проблемы

Если возникают ошибки, связанные с файлами *.dll и *.ocx , необходимо:

1. Переустановить программу.

2. Если переустановка программы не помогает, нужно проверить наличие в системе требуемых файлов. Файлы *.dll и *.ocx , как правило, должны быть расположены в папке \WINDOWS\system32 (реже – в каталоге конкретной программы). Если файлы присутствуют, нужно их.

Если требуемых файлов нет, найдите их в Интернете, скачайте и скопируйте в папку \WINDOWS\system32 и в каталог программы. Теперь нужно их.

При регистрации файлов *.dll и *.ocx происходит их запись в Реестр Windows (это можно сделать и вручную). При этом в ветке создаётся параметр REG_DWORD , например C:\Program Files\InterVideo\Common\Bin\StorageTools.dll или C:\WINDOWS\System32\MSCOMCTL.OCX, со значением 1 .

Регистрация файлов *.dll и *.ocx производится с помощью сервера регистрации regsvr32.exe (дисковый адрес которого – C:\WINDOWS\system32).

Рассмотрим способы регистрации:

1. Нажмите Пуск – Выполнить… – Запуск программы – regsvr32 имя_файла – OK .

2. Нажмите Пуск – Выполнить… – Запуск программы – cmd – OK . Запустится интерпретатор команд cmd.exe , после приглашения системы C:\Documents and Settings\Имя_пользователя> введите regsvr32 имя_файла , например, regsvr32 seon.ocx.

3. Если вы пользуетесь файловым менеджером Total Commander , то можно выполнить регистрацию файлов *.dll и *.ocx с помощью командной строки Total Commander .

Примечание

Использование команды regsvr32 :

regsvr32 ] DLL-файл

/u – отменяет регистрацию DLL ;

/s – «тихий» режим – окна сообщений не отображаются;

Одни из самых частых ошибок на Windows – это ошибки с DLL библиотеками. Важно знать, как их можно исправить без переустановки ОС.


Windows выдает ошибку с DLL файлом и вы не знаете, что делать? Не переживайте, у вас есть минимум 3 варианта, как устранить любую неполадку подобного характера. Системные документы отвечают за стабильную работу не только самой ОС, но и сторонних программ, так что будет нелишним узнать, как устранить все проблемы

Файлы, имеющие расширение.DLL — это системные файлы, которые используются как Windows, так и сторонними программами. Файлы с таким разрешением часто являются причиной проблем, но система сама предупреждает о них. Если какой-то файл неисправен, то вы увидите сообщение об ошибке, подобное этому:

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

Как исправить ошибки

Есть три способа, как устранить:

  • Восстановить систему;
  • Перезаписать необходимый файл;
  • Использовать универсальные программы;

Восстановление системы – это кардинальный метод, который лучше не применять, если у вас всего 1 ошибка. Этот способ хорош лишь в случае, если у вас массовые неполадки, и система работает крайне нестабильно. Чтобы вы могли восстановить систему вам нужно заранее создать точку восстановления, либо иметь резервную копию всей ОС. Если вы читаете этот материал еще в тот день, когда у вас нет ни одной проблемы, то рекомендуем создать резервную копию или точку восстановления прямо сейчас. Это можно сделать с помощью специальных программ или же просто используйте стандартный функционал вашей операционной системы.

Перезапись необходимого файла – это идеальный вариант, если у вас всего лишь одна. В этом случае вам нужно найти необходимую библиотеку в сети Интернет и перезаписать только ее. Когда будете искать библиотеку, заодно уточните, в каком разделе на компьютере она находится. Также не забудьте, что файлы различаются в зависимости от разрядности ОС. Если у вас Windows 32 bit, то и библиотека вам нужна x32, аналогично поступаем и с Windows 64 бита, туда записываем только 64-ех битные библиотеки.

Третий способ – использование специализированных программ, самый простой. Например, вы можете использовать , но есть и другие утилиты. Подобные программы могут проанализировать ваше устройство, найти все и автоматически их устранить. Рекомендуем использовать только бесплатные варианты программ, так как платные аналоги редко чем отличаются. Автоматическое устранение возможно лишь в том случае, если ваши трудности не критические и система в целом продолжает работать корректно.

Популярные проблемы

Есть несколько проблемных DLL библиотек, которые чаще остальных становятся причиной проблем. К таким библиотекам можно смело отнести следующие:

  • d3d11;
  • dxgi;
  • msvcr100;
  • unarc;
  • xlive;
  • openal32;

Все эти проблемы связаны с пакетом DirectX. Чтобы их устранить достаточно скачать и переустановить пакет. В результате вы устраните подобные трудности на своем компьютере на Windows. Ниже представлен еще один способ, если ничего из этой статьи вам не помогло:

Файлы формата 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 не стоит открывать или редактировать.

8 ответов

Что такое DLL?

Библиотеки динамических ссылок (DLL) похожи на EXE, но они не являются непосредственно исполняемыми. Они похожи на файлы.so в Linux/Unix. Другими словами, DLL - это реализация разделяемых библиотек MS.

DLL файлы похожи на EXE, что сам формат файла тот же. И EXE, и DLL основаны на формате Portable Executable (PE). DLL могут также содержать COM-компоненты и библиотеки.NET.

Что содержит DLL?

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

Типы библиотек:

Практически во всех операционных системах существует 2 типа библиотек. Статические библиотеки и динамические библиотеки. В Windows расширения файлов следующие: Статические библиотеки (.lib) и динамические библиотеки (.dll). Основное отличие состоит в том, что статические библиотеки связаны с исполняемым файлом во время компиляции; тогда как динамически связанные библиотеки не связаны до времени выполнения.

Подробнее о статических и динамических библиотеках:

Обычно вы не видите статические библиотеки, хотя на вашем компьютере, потому что статическая библиотека встроена непосредственно внутри модуля (EXE или DLL). Динамическая библиотека представляет собой автономный файл.

DLL может быть изменена в любое время и загружается только во время выполнения, когда EXE явно загружает DLL. Статическая библиотека не может быть изменена после ее компиляции в EXE. DLL можно обновлять индивидуально без обновления самого EXE.

Программа загружает DLL при запуске через Win32 API LoadLibrary или когда это зависимость от другой DLL. Программа использует GetProcAddress для загрузки функции или LoadResource для загрузки ресурса.

Дальнейшее чтение:

Связанные вопросы


Похожие вопросы

Что такое DLL?

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

Насколько они важны?

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

DLL файлы могут потребовать другие DLL файлы

Точно так же, как для приложения требуется DLL файл, DLL файл может зависеть от других файлов DLL. Если один из этих DLL файлов в цепочке зависимостей не найден, приложение не загружается. Это легко отлаживается с помощью любых инструментов зависимостей зависимостей, таких как Dependency Walker .

Их так много в системных папках

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

Установленные приложения также используют файлы DLL

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

DLL Hell

Однако иногда обновления системы часто прерывают другие программы, когда существует несоответствие версии между совместно используемыми файлами DLL и требуемой программой. Системные контрольные точки и кеш-память DLL и т.д. Были инициативами M $для решения этой проблемы. Платформа.NET может не столкнуться с этой проблемой вообще.

Как мы узнаем, что внутри DLL файла?

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

Как мы их создаем/используем?

Обратитесь к документации по программному обеспечению от вашего поставщика. Для С++ обратитесь к LoadLibrary в MSDN.

Предположим, вы создаете исполняемый файл, который использует некоторые функции, найденные в библиотеке.

Если используемая библиотека статическая , компоновщик скопирует объектный код для этих функций непосредственно из библиотеки и вставляет их в исполняемый файл.

Теперь, если этот исполняемый файл запущен, он имеет все, что ему нужно, поэтому исполняемый загрузчик просто загружает его в память и запускает его.

Если библиотека динамическая , компоновщик не будет вставлять объектный код, а скорее вставляет заглушку, которая в основном говорит, что эта функция находится в этой DLL в этом месте.

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

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

Следовательно, имя Динамическая библиотека ссылок , части процесса связывания выполняются динамически во время выполнения исполняемым загрузчиком.

Одно последнее замечание, если вы не подключаетесь к DLL, тогда никакие заглушки не будут вставлены компоновщиком, но Windows по-прежнему предоставляет API GetProcAddress , который позволяет загрузить выполнение DLL после того, как исполняемый файл запущен.

Файлы DLL содержат Таблица экспорта , которая представляет собой список символов, которые могут быть просмотрены вызывающей программой. Символы обычно являются функциями с конвенция вызова C (__ stcall). Таблица экспорта также содержит адрес функции.

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

DLL (библиотеки динамических ссылок) и SL (разделяемые библиотеки, эквивалентные в UNIX) - это просто библиотеки исполняемого кода, которые могут быть динамически связаны с исполняемым файлом во время загрузки.

Статические библиотеки вставляются в исполняемый файл во время компиляции и фиксируются с этой точки. Они увеличивают размер исполняемого файла и не могут быть разделены.

Динамические библиотеки имеют следующие преимущества:

1/Они загружаются во время выполнения, а не компилируются, поэтому их можно обновлять независимо от исполняемого файла (все эти причудливые окна и диалоговые окна, которые вы видите в Windows, поступают из DLL, поэтому внешний вид вашего приложения может измените, не переписывая его).

2/Поскольку они независимы, код можно разделить на несколько исполняемых файлов - это экономит память, поскольку, если вы используете 100 приложений с одной DLL, в памяти может быть только одна копия DLL.

Их основным недостатком является преимущество # 1 - изменение библиотеки DLL независимо от приложения может привести к тому, что ваше приложение перестанет работать или начнет вести себя причудливо. Версии DLL, как правило, не очень хорошо управляются под Windows, и это приводит к причудливому названию "DLL Hell".

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

  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, что свело на нет преимущества изначального принципа модульности.