Как установить DLL файлы
2. скопируйте этот .dll файл в папку приложения или игры, или вы можете скопировать его в системную папку Windows. Путь к системной папке для 32-битной версии Windows XP, Vista, 7, 8 — C:\Windows\System32, для 64-битной версии — C:\Windows\syswow64 .

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

4. Если вы скопировали .dll файл в системную папку Windows, вы можете запустить командную строку и выполнить команду resrv32 “name.dll” для этого нажмите кнопку start или меню start и в поле Run введите cmd и нажмите Enter, после чего введите regsvr32 “name.dll” и нажмите Enter.

5. Перезагрузите компьютер.
Определение библиотек DLL для распространения
Если вы разработали приложение, использующее библиотеки DLL из Visual Studio, для его запуска на компьютерах пользователей также должны присутствовать эти библиотеки. Так как большинство пользователей, вероятно, не установлены Visual Studio, для них необходимо предоставить эти библиотеки DLL. Visual Studio делает эти библиотеки DLL доступными как распространяемые файлы , которые можно включить в установщик приложения.
Чтобы упростить включение распространяемых библиотек DLL в установщик, они доступны как автономные распространяемые пакеты. Эти пакеты представляют собой исполняемые файлы, относящиеся к архитектуре, которые используют централизованное развертывание для установки распространяемых файлов на компьютере пользователя. Например, vc_redist.x86.exe устанавливает 32-разрядные библиотеки для компьютеров x86 и x64, vc_redist.x64.exe устанавливает 64-разрядные библиотеки для компьютеров x64 и vcredist.ARM64.exe устанавливает библиотеки для компьютеров ARM и ARM64. Рекомендуется использовать центральное развертывание, так как корпорация Майкрософт может использовать службу Центра обновления Windows для обновления этих библиотек независимо друг от друга. Помимо копирования в установке Visual Studio, для скачивания доступны текущие распространяемые пакеты. Ссылки на последние поддерживаемые распространяемые пакеты для текущих и старых наборов инструментов см. в статье «Последние поддерживаемые Распространяемый компонент Visual C++ загрузки». Определенные более ранние версии распространяемых пакетов можно найти, выполнив поиск my.visualstudio.com по запросу «пакеты Распространяемый компонент Visual C++».
Чтобы упростить включение распространяемых библиотек DLL в установщик, они доступны как автономные распространяемые пакеты. Эти пакеты представляют собой исполняемые файлы, относящиеся к архитектуре, которые используют централизованное развертывание для установки распространяемых файлов на компьютере пользователя. Например, vcredist_x86.exe устанавливает 32-разрядные библиотеки для компьютеров x86 и x64, vcredist_x64.exe устанавливает 64-разрядные библиотеки для компьютеров x64 и vcredist_ARM.exe устанавливает библиотеки для компьютеров ARM. Рекомендуется использовать центральное развертывание, так как корпорация Майкрософт может использовать службу Центра обновления Windows для обновления этих библиотек независимо друг от друга. Помимо копирования в установке Visual Studio, для скачивания доступны текущие распространяемые пакеты. Ссылки на последние поддерживаемые распространяемые пакеты для текущих и старых наборов инструментов см. в статье «Последние поддерживаемые загрузки Visual C++». Определенные более ранние версии распространяемых пакетов можно найти, выполнив поиск my.visualstudio.com по запросу «пакеты Распространяемый компонент Visual C++».
Мы поддерживаем только распространяемый пакет, который совпадает с версией набора инструментов или более поздней. Основной номер версии распространяемого пакета, который вы развертываете, должен соответствовать версии набора инструментов Visual Studio, используемого для создания приложения, и дополнительная версия должна быть той же или более поздней. Visual Studio 2022, 2019, 2017 и 2015 имеют совместимые номера версий набора инструментов. Для этих версий все новые распространяемые файлы Visual Studio могут использоваться приложениями, созданными набором инструментов из более старой версии. Например, распространяемые файлы Visual Studio 2022 могут использоваться приложениями, созданными с помощью набора инструментов Visual Studio 2017 или 2015. Хотя они могут быть совместимы, мы не поддерживаем использование старых распространяемых файлов в приложениях, созданных с помощью нового набора инструментов. Например, использование распространяемых файлов 2017 в приложениях, созданных с помощью набора инструментов 2019 года, не поддерживается.
Также можно включить распространяемые библиотеки DLL в установщик в модули слияния. Этот метод теперь устарел, так как библиотеки, развернутые таким образом, не могут быть автоматически обновлены Обновл. Windows. Распространяемые модули слияния или модули установщика Майкрософт ( .msm файлы) — это необязательные компоненты, доступные в Visual Studio Installer. При установке модули слияния для распространяемых библиотек DLL находятся в каталоге установки Visual Studio в разделе %VCToolsRedistDir%\MergeModules\ . В Visual Studio 2015 и более ранних версиях Visual Studio эти файлы находятся в каталоге Program Files или Program Files (x86) в подкаталоге Common Files\Merge Modules . Дополнительные сведения об использовании этих файлов см. в разделе «Распространение компонентов с помощью модулей слияния».
Отдельные распространяемые библиотеки DLL также включаются в установку Visual Studio. По умолчанию они устанавливаются в папках Visual %VCToolsRedistDir%\[architecture]\Microsoft.[toolset].[library] , где [architecture] представляет целевую архитектуру, [toolset] представляет версию набора инструментов и [library] представляет библиотеку.
Также можно включить распространяемые библиотеки DLL в установщик в модули слияния. Этот метод теперь устарел, так как библиотеки, развернутые таким образом, не могут быть автоматически обновлены Обновл. Windows. Распространяемые модули слияния для распространяемых библиотек DLL находятся в каталоге Program Files или Program Files (x86) в подкаталоге Common Files\Merge Modules . Дополнительные сведения об использовании этих файлов см. в разделе «Распространение компонентов с помощью модулей слияния».
Отдельные распространяемые библиотеки DLL также включаются в установку Visual Studio. По умолчанию они устанавливаются в каталог установки Visual Studio 2015 в redist\debug_nonredist\[architecture]\Microsoft.[toolset].[library] папках, где [architecture] представляет целевую архитектуру, [toolset] представляет версию набора инструментов и [library] является библиотекой отладки, которая содержит библиотеку DLL отладки.
Используйте последнюю версию любого DLL-файла библиотеки, распространяемого пакета или модуля слияния, найденного в этих каталогах. Вы можете использовать эти библиотеки для локального развертывания, установив их в одном каталоге с приложением. Мы не рекомендуем локальное развертывание, так как тогда вам потребуется самостоятельно получать обновления для развернутых приложений. Централизованное развертывание с помощью распространяемых пакетов предпочтительнее.
Чтобы определить, какие библиотеки DLL необходимо повторно распространить вместе с приложением, составьте список библиотек DLL, от которых зависит приложение. Эти библиотеки DLL обычно перечислены как входные данные библиотеки импорта компоновщика. Некоторые библиотеки, такие как vcruntime и универсальная библиотека времени выполнения языка C (UCRT), включаются по умолчанию. Если приложение или одна из его зависимостей используется LoadLibrary для динамической загрузки библиотеки DLL, эта библиотека DLL может не быть указана во входных данных компоновщика. Одним из способов сбора списка динамически загруженных библиотек DLL является запуск walkency Walker ( depends.exe ) в приложении, как описано в разделе «Основные сведения о зависимостях приложения Visual C++». К сожалению, это средство устарело и может сообщить о том, что не удается найти некоторые библиотеки DLL.
Если у вас есть список зависимостей, сравните его со списком, связанным в файле, который находится в Redist.txt каталоге установки Microsoft Visual Studio. Или в списке распространяемых библиотек DLL, на которые ссылается раздел «Распространяемые файлы кода» условий лицензионного соглашения Майкрософт для копии Visual Studio. Сведения о Visual Studio 2022 см. в разделе «Распространяемый код» для Visual Studio 2022. Сведения о Visual Studio 2019 см. в разделе «Распространяемый код» для Visual Studio 2019. Для Visual Studio 2017 см. раздел Распространяемый код для Microsoft Visual Studio 2017 (включает служебные программы, возможности расширяемости и файлы BuildServer). Для Visual Studio 2015 см. раздел Распространяемый код для Microsoft Visual Studio 2015 и пакета SDK для Microsoft Visual Studio 2015 (включает служебные программы и файлы BuildServer). Для Visual Studio 2013 этот список можно найти в разделе Распространяемый код для Microsoft Visual Studio 2013 и Microsoft Visual Studio 2013 SDK.
В версиях Visual Studio до Visual Studio 2015 библиотека среды выполнения C (CRT) была включена в состав распространяемой библиотеки DLL msvc[version].dll . В Visual Studio 2015 функции в CRT были рефакторингованы в vcruntime и UCRT. UCRT теперь является системным компонентом в Windows 10 и более поздних версиях, управляемым Обновл. Windows. Она доступна во всех операционных системах Windows 10 и более поздних версий. Для развертывания приложения в более ранних операционных системах может потребоваться распространить и UCRT. Ранняя версия UCRT включена в распространяемые файлы Visual Studio. Эта версия установлена только в операционных системах, предшествующих Windows 10, и только если версия UCRT уже установлена. Сведения об устанавливаемой версии UCRT для систем прежних версий в виде пакета обновления системы Майкрософт см. в разделе Универсальная среда выполнения C Windows 10 в Центре загрузки Майкрософт.
Невозможно распространить все файлы, включенные в Visual Studio. Разрешено распространять только те файлы, которые указаны в Redist.txt списке REDIST или в интернете. Вы также не можете распространять отладочные версии приложений или отладочные версии библиотек dll или библиотек, предоставляемых корпорацией Майкрософт. Вы можете копировать только исполняемые файлы отладки и библиотеки на компьютеры, используемые для тестирования. Дополнительные сведения см. в разделе «Выбор метода развертывания».
В следующей таблице описываются некоторые библиотеки DLL Visual C++, от которых может зависеть ваше приложение.
| Библиотека Visual C++ | Description | Относится к |
|---|---|---|
| vcruntime[version].dll | Библиотека среды выполнения для машинного кода. | Приложения, использующие обычные службы запуска и завершения работы для языка C и C++. |
| vccorlib[version].dll | Библиотека среды выполнения для управляемого кода. | Приложения, использующие службы языка C++ для управляемого кода. |
| msvcp[version].dll и msvcp[version_dotnumber].dll . | Стандартная библиотека C++ для машинного кода. | Приложения, использующие стандартную библиотеку C++. |
| concrt[version].dll | Библиотека среды выполнения с параллелизмом для машинного кода. | Приложения, использующие среду выполнения с параллелизмом. |
| mfc[version].dll | Библиотека Microsoft Foundation Class (MFC). | Приложения, использующие библиотеку MFC. |
| mfc[version][language].dll | Ресурсы библиотеки Microsoft Foundation Classes (MFC). | Приложения, использующие определенные языковые ресурсы для MFC. |
| mfc[version]u.dll | Библиотека MFC с поддержкой Юникода. | Приложения, использующие библиотеку MFC и требующие поддержку Юникода. |
| mfcmifc80.dll | Библиотека управляемых интерфейсов MFC. | Приложения, использующие библиотеку MFC с элементами управления Windows Forms. |
| mfcm[version].dll | Управляемая библиотека MFC. | Приложения, использующие библиотеку MFC с элементами управления Windows Forms. |
| mfcm[version]u.dll | Управляемая библиотека MFC с поддержкой Юникода. | Приложения, использующие библиотеку MFC с элементами управления Windows Forms и требующие поддержку Юникода. |
| vcamp[version].dll | Библиотека AMP для машинного кода. | Приложения, использующие код библиотеки C++ AMP. |
| vcomp[version].dll | Библиотека OpenMP для машинного кода. | Приложения, использующие код библиотеки C++ AMP. |
Библиотеку шаблонных классов ATL больше не требуется повторно распространять в качестве отдельного DLL-файла. Ее функции были переданы заголовкам и статической библиотеке.
Дополнительные сведения о том, как распространять эти библиотеки DLL с помощью приложения, см. в разделе «Распространение файлов Visual C++». Примеры см . в примерах развертывания.
Как правило, вам не нужно распространять библиотеки DLL системы, так как они являются частью операционной системы. Однако возможны исключения, например если приложение выполняется в нескольких версиях операционных систем Microsoft. В этом случае необходимо внимательно ознакомиться с соответствующими условиями лицензирования. Кроме того, попробуйте обновить системные библиотеки DLL с помощью Обновл. Windows, пакетов обновления или с помощью распространяемых пакетов, доступных корпорацией Майкрософт.
Что такое библиотека DLL?
В этой статье описывается, что такое библиотека динамической компоновки (DLL) и какие проблемы могут возникнуть при использовании библиотек DLL. В ней также описаны некоторые дополнительные проблемы, которые следует учитывать при разработке собственных DLL-библиотек.
Применяется к: Windows 10 — все выпуски
Оригинальный номер базы знаний: 815065
Сводка
В этой статье поясняется, что такое DLL, описываются методы динамической компоновки, зависимости DLL, точки входа DLL, экспорт функций DLL и средства устранения неполадок DLL.
Эта статья завершается обобщенным сравнением библиотек DLL со сборками платформы Microsoft .NET Framework.
Для операционных систем Windows большая часть функциональности операционной системы обеспечивается DLL. Кроме того, при запуске программы в одной из операционных систем Windows большая часть функциональности программы может обеспечиваться библиотеками DLL. Например, некоторые программы могут содержать множество различных модулей, при этом каждый модуль программы содержится и распространяется в библиотеках DLL.
Использование DLL-библиотек способствует разбиению кода на модули, повторному использованию кода, эффективному использованию памяти и сокращению дискового пространства. Таким образом, операционная система и программы загружаются и работают быстрее, а также занимают меньше места на диске компьютера.
Когда программа использует DLL, проблема, которая называется зависимостью, может привести к тому, что программа не запустится. Когда программа использует библиотеку DLL, создается зависимость. Если другая программа перезаписывает и прерывает эту зависимость, исходная программа может не запуститься успешно.
С появлением платформы .NET Framework большинство проблем с зависимостями были устранены благодаря использованию сборок.
Дополнительная информация
DLL — это библиотека, содержащая код и данные, которые могут использоваться несколькими программами одновременно. Например, в операционных системах Windows DLL-библиотека Comdlg32 выполняет общие функции, связанные с диалоговыми окнами. Каждая программа может использовать функции, содержащиеся в этой библиотеке DLL, для реализации диалогового окна Открыть. Это способствует повторному использованию кода и эффективному использованию памяти.
С помощью библиотеки DLL программу можно разделить на отдельные компоненты. Например, бухгалтерская программа может продаваться по модулям. Каждый модуль можно загрузить в основную программу во время выполнения, если он установлен. Так как модули являются отдельными, время загрузки программы ускоряется. Модуль загружается только тогда, когда запрашивается эта функциональность.
Кроме того, обновления проще применять к каждому модулю, не затрагивая другие части программы. Например, у вас может быть программа расчета заработной платы, и ставки налога меняются каждый год. Если эти изменения изолированы в библиотеке DLL, можно применить обновление, не требуя сборки или установки всей программы еще раз.
В следующем списке описаны некоторые файлы, которые реализованы в виде библиотек DLL в операционных системах Windows:
- Файлы элементов ActiveX (OCX) Примером элемента управления ActiveX является элемент управления календарем, который позволяет выбрать дату из календаря.
- Файлы панели управления (CPL) Примером CPL-файла является элемент, расположенный в панели управления. Каждый элемент является специализированной библиотекой DLL.
- Файлы драйвера устройства (DRV) Примером драйвера устройства является драйвер принтера, который управляет печатью на принтере.
Преимущества DLL-библиотек
В следующем списке описаны некоторые преимущества использования программой DLL-библиотек:
- Использует меньше ресурсов Если несколько программ используют одну и ту же библиотеку функций, DLL-библиотека может уменьшить дублирование кода, загружаемого на диск и в физическую память. Это может сильно повлиять на производительность не только программы, выполняемой на переднем плане, но и других программ, работающих под управлением операционной системы Windows.
- Улучшает модульную архитектуру Библиотека DLL помогает в разработке модульных программ. Она помогает разрабатывать большие программы, требующие использования нескольких языковых версий, или программы, требующие модульной архитектуры. Примером модульной программы является бухгалтерская программа со множеством модулей, которые могут быть динамически загружены во время выполнения.
- Облегчает развертывание и установку Если функции в библиотеке DLL требуется обновление или исправление, для развертывания и установки библиотеки DLL не требуется повторная компоновка программы с этой библиотекой. Кроме того, если несколько программ используют одну и ту же библиотеку DLL, они смогут получить преимущества от обновления или исправления. Эта проблема может возникать чаще при использовании сторонних библиотек DLL, которые регулярно обновляются или исправляются.
Зависимости DLL
Если программа или библиотека DLL использует функцию DLL в другой библиотеке DLL, создается зависимость. Программа больше не является автономной, и при нарушении зависимости могут возникнуть проблемы. Например, программа может не запуститься, если произойдет одно из следующих действий:
- Зависимая библиотека DLL обновляется до новой версии.
- Зависимая библиотека DLL исправлена.
- Зависимая библиотека DLL перезаписывается более ранней версией.
- Зависимая библиотека DLL удалена с компьютера.
Эти действия известны как конфликты DLL. Если обратная совместимость не применяется, программа может не запуститься.
В следующем списке описываются изменения, которые были представлены в Windows 2000 и операционных системах Windows более поздних версий, чтобы свести к минимуму проблемы с зависимостями:
- Защита файлов Windows В защите файлов Windows операционная система предотвращает обновление или удаление системных библиотек DLL неавторизованным агентом. Когда установка программы пытается удалить или обновить библиотеку DLL, которая определена как системная библиотека DLL, защита файлов Windows выполнит поиск действительной цифровой подписи.
- Частные библиотеки DLL Частные библиотеки DLL позволяют изолировать программу от изменений, вносимых в общие библиотеки DLL. Частные библиотеки DLL используют сведения о конкретной версии или пустой файл .local для принудительного применения версии библиотеки DLL, используемой программой. Чтобы использовать частные библиотеки DLL, найдите библиотеки DLL в корневой папке программы. Затем для новых программ добавьте сведения о конкретной версии в библиотеку DLL. Для старых программ используйте пустой файл .local . Каждый метод указывает операционной системе использовать частные библиотеки DLL, расположенные в корневой папке программы.
Средства устранения неполадок, связанных с библиотеками DLL
Для устранения неполадок с библиотеками DLL доступно несколько средств. Ниже приведены некоторые из этих средств.
Обходчик зависимостей
Средство «Обходчик зависимостей» может рекурсивно проверять все зависимые библиотеки DLL, используемые программой. При открытии программы в обходчике зависимостей будут выполнены следующие проверки:
- Обходчик зависимостей проверяет наличие отсутствующих библиотек DLL.
- Обходчик зависимостей проверяет наличие недопустимых программных файлов или библиотек DLL.
- Обходчик зависимостей проверяет, совпадают ли функции импорта и экспорта.
- Обходчик зависимостей проверяет наличие циклических ошибок зависимостей.
- Обходчик зависимостей проверяет наличие недопустимых модулей, так как модули предназначены для другой операционной системы.
С помощью обходчика зависимостей можно документировать все библиотеки DLL, используемые программой. Это может помочь предотвратить и устранить проблемы с библиотеками DLL, которые могут возникнуть в будущем. При установке Visual Studio 6.0 обходчик зависимостей находится в следующем каталоге:
drive\Program Files\Microsoft Visual Studio\Common\Tools
Универсальный устранитель проблем DLL
Универсальный устранитель проблем DLL (DUPS) используется для аудита, сравнения, документирования и отображения информации DLL. В следующем списке описаны утилиты, входящие в состав инструмента DUPS:
- Dlister.exe Эта утилита перечисляет все библиотеки DLL на компьютере и записывает информацию в текстовый файл или в файл базы данных.
- Dcomp.exe Эта утилита сравнивает библиотеки DLL, перечисленные в двух текстовых файлах, и создает третий текстовый файл, содержащий различия.
- Dtxt2DB.exe Эта утилита загружает текстовые файлы, созданные с помощью утилит Dlister.exe и Dcomp.exe, в базу данных dllHell.
- DlgDtxt2DB.exe Эта утилита предоставляет графический интерфейс пользователя (GUI) версии утилиты Dtxt2DB.exe.
Справочная база данных библиотеки DLL
Справочная база данных библиотеки DLL помогает найти определенные версии библиотек DLL, установленных продуктами корпорации Microsoft.
Разработка библиотеки DLL
В этом разделе описываются проблемы и требования, которые следует учитывать при разработке собственных библиотек DLL.
Типы библиотек DLL
При загрузке библиотеки DLL в приложение два метода компоновки позволяют вызывать экспортированные функции DLL. Два метода компоновки — динамическая компоновка во время загрузки и динамическая компоновка во время выполнения.
Динамическая компоновка во время загрузки
При динамической компоновке во время загрузки приложение производит явные вызовы экспортированных функций DLL, таких как локальные функции. Чтобы использовать динамическую компоновку во время загрузки, укажите файл заголовка (H) и файл библиотеки импорта (LIB) при компиляции и компоновке приложения. При этом компоновщик предоставит системе сведения, необходимые для загрузки библиотеки DLL и разрешения экспортированных расположений функций DLL во время загрузки.
Динамическая компоновка во время выполнения
При динамической компоновке во время выполнения приложение вызывает функцию LoadLibrary или LoadLibraryEx для загрузки библиотеки DLL во время выполнения. После успешной загрузки библиотеки DLL используйте функцию GetProcAddress для получения адреса экспортированной функции DLL, которую требуется вызвать. При использовании динамической компоновки во время выполнения файл библиотеки импорта не требуется.
В следующем списке описаны критерии приложения для использования динамической компоновки во время загрузки и использования динамической компоновки во время выполнения:
- Производительность запуска Если важна начальная производительность запуска приложения, следует использовать динамическую компоновку во время выполнения.
- Простота использования При динамической компоновке во время загрузки экспортированные функции DLL являются локальными функциями. Это упрощает вызов этих функций.
- Логика приложения При динамической компоновке во время выполнения приложение может выполнять ветвление для загрузки различных модулей по мере необходимости. Это важно при разработке версий на нескольких языках.
Точка входа DLL
При создании библиотеки DLL можно дополнительно указать функцию точки входа. Функция точки входа вызывается, когда процессы или потоки присоединяются к библиотеке DLL или отсоединяются от библиотеки DLL. Функцию точки входа можно использовать для инициализации структур данных или удаления структур данных, требуемых библиотекой DLL. Кроме того, если приложение является многопоточным, можно использовать локальную память потока (TLS) для выделения памяти, которая является частной для каждого потока в функции точки входа. Следующий код является примером функции точки входа DLL.
BOOL APIENTRY DllMain( HANDLE hModule,// Handle to DLL module DWORD ul_reason_for_call,// Reason for calling function LPVOID lpReserved ) // Reserved < switch ( ul_reason_for_call ) < case DLL_PROCESS_ATTACHED: // A process is loading the DLL. break; case DLL_THREAD_ATTACHED: // A process is creating a new thread. break; case DLL_THREAD_DETACH: // A thread exits normally. break; case DLL_PROCESS_DETACH: // A process unloads the DLL. break; >return TRUE; >
Когда функция точки входа возвращает значение FALSE, приложение не запускается при использовании динамической компоновки во время загрузки. Если вы используете динамическую компоновку во время выполнения, не будет загружаться только отдельная библиотека DLL.
Функция точки входа должна выполнять только простые задачи инициализации и не должна вызывать никаких других функций загрузки или завершения DLL. Например, в функции точки входа не следует прямо или косвенно вызывать функцию LoadLibrary или LoadLibraryEx . Кроме того, не следует вызывать функцию FreeLibrary при завершении процесса.
Убедитесь, что доступ в многопоточных приложениях к глобальным данным DLL синхронизирован (потокобезопасный), чтобы избежать возможного повреждения данных. Для этого используйте TLS для предоставления уникальных данных для каждого потока.
Экспорт функций DLL
Чтобы экспортировать функции DLL, можно добавить ключевое слово функции в экспортированные функции DLL или создать файл определения модуля (DEF), в котором перечислены экспортированные функции DLL.
Чтобы использовать ключевое слово функции, необходимо объявить каждую функцию, которую требуется экспортировать, с помощью следующего ключевого слова:
__declspec(dllexport)
Чтобы использовать экспортированные функции DLL в приложении, необходимо объявить каждую функцию, которую требуется импортировать, со следующими ключевое слово: __declspec(dllimport)
Как правило, для разделения инструкции экспорта и инструкции import используется один файл заголовка с инструкцией определения и инструкцией ifdef .
Вы также можете использовать файл определения модуля для объявления экспортированных функций DLL. При использовании файла определения модуля не нужно добавлять ключевое слово функции в экспортированные функции DLL. В файле определения модуля объявляется инструкция LIBRARY и инструкция EXPORTS для библиотеки DLL. Следующий код является примером файла определения.
// SampleDLL.def // LIBRARY "sampleDLL" EXPORTS HelloWorld
Пример библиотеки DLL и приложения
В Visual C++ 6.0 можно создать библиотеку DLL, выбрав тип проекта Библиотека динамической компоновки Win32 или тип проекта Мастер приложений MFC (dll).
Следующий код является примером библиотеки DLL, созданной в Visual C++ с использованием типа проекта Библиотека динамической компоновки Win32.
// SampleDLL.cpp // #include "stdafx.h" #define EXPORTING_DLL #include "sampleDLL.h" BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) < return TRUE; >void HelloWorld() < MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK); >// File: SampleDLL.h // #ifndef INDLL_H #define INDLL_H #ifdef EXPORTING_DLL extern __declspec(dllexport) void HelloWorld(); #else extern __declspec(dllimport) void HelloWorld(); #endif #endif
Следующий код является примером проекта Приложение Win32, который вызывает экспортированную функцию DLL в библиотеке DLL SampleDLL.
// SampleApp.cpp // #include "stdafx.h" #include "sampleDLL.h" int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
При динамической компоновке во время загрузки необходимо компоновать библиотеку импорта SampleDLL.lib, которая создается при сборке проекта SampleDLL.
При динамической компоновке во время выполнения для вызова экспортируемой функции DLL SampleDLL.dll используется код, аналогичный следующему коду:
. typedef VOID (*DLLPROC) (LPTSTR); . HINSTANCE hinstDLL; DLLPROC HelloWorld; BOOL fFreeDLL; hinstDLL = LoadLibrary("sampleDLL.dll"); if (hinstDLL != NULL) < HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld"); if (HelloWorld != NULL) (HelloWorld); fFreeDLL = FreeLibrary(hinstDLL); >.
При компиляции и компоновке приложения SampleDLL операционная система Windows ищет библиотеку DLL SampleDLL в следующих расположениях в следующем порядке:
- Папка приложения
- Текущая папка
- Системная папка Windows
Примечание. Функция GetSystemDirectory возвращает путь к системной папке Windows.
Примечание. Функция GetWindowsDirectory возвращает путь к папке Windows.
Сборка .NET Framework
С появлением платформ .NET и .NET Framework большинство проблем, связанных с библиотеками DLL, были устранены с помощью сборок. Сборка — это логический элемент функциональности, который выполняется под управлением общеязыковой среды выполнения .NET. Сборка физически существует в виде DLL-файла или EXE-файла. Однако внутри сборка отличается от библиотеки DLL Microsoft Win32.
Файл сборки содержит манифест сборки, метаданные типа, код MSIL и другие ресурсы. Манифест сборки содержит метаданные сборки, которые предоставляют все сведения, необходимые для самостоятельного описания сборки. В манифест сборки включены следующие сведения:
- Имя сборки
- Сведения о версии
- Сведения о языке
- Сведения о строгом имени
- Список файлов сборки
- Справочные сведения о типе
- Сведения о ссылочных и зависимых сборках
Код MSIL, содержащийся в сборке, не может выполняться напрямую. Вместо этого выполнение кода MSIL управляется через среду CLR. По умолчанию создаваемая сборка является закрытой для приложения. Чтобы создать общую сборку, необходимо присвоить сборке строгое имя, а затем опубликовать сборку в глобальном кэше сборок.
В следующем списке описаны некоторые функции сборок по сравнению с функциями библиотек DLL Win32:
- Самоописание При создании сборки все сведения, необходимые среде CLR для запуска сборки, содержатся в манифесте сборки. Манифест сборки содержит список зависимых сборок. Таким образом, среда CLR может поддерживать согласованный набор сборок, используемых в приложении. В библиотеках DLL Win32 нельзя поддерживать согласованность между набором библиотек DLL, используемых в приложении, когда используются общие библиотеки DLL.
- Управление версиями. В манифесте сборки сведения о версии записываются и применяются средой CLR. Кроме того, политики версии позволяют принудительно применять использование конкретной версии. В библиотеках DLL Win32 управление версиями не может применяться операционной системой. Необходимо убедиться, что библиотеки DLL поддерживают обратную совместимость.
- Параллельное развертывание Сборки поддерживают параллельное развертывание. Одно приложение может использовать одну версию сборки, а другое — другую. Начиная с Windows 2000, параллельное развертывание поддерживается путем поиска библиотек DLL в папке приложения. Кроме того, защита файлов Windows предотвращает перезапись или замену системных библиотек DLL неавторизованным агентом.
- Автономность и изоляция Приложение, разработанное с помощью сборки, может быть автономным и изолированным от других приложений, запущенных на компьютере. Эта функция помогает создавать установки с нулевым влиянием.
- Выполнение Сборка запускается с учетом разрешений безопасности, которые указаны в манифесте сборки и контролируются средой CLR.
- Независимость от языка Сборку можно разработать с помощью любого поддерживаемого языка .NET. Например, можно разработать сборку в Microsoft Visual C#, а затем использовать сборку в проекте Visual Basic .NET.
Сбор данных
Если вам нужна помощь со стороны службы поддержки Майкрософт, мы рекомендуем собирать сведения, выполнив действия, описанные в разделе Сбор сведений с помощью TSS для проблем, связанных с развертыванием.
Ссылки
- Развертывание и настройка приложений
- Сборки
- Динамическая компоновка во время выполнения
- Локальная память потока
Как зарегистрировать DLL в Windows

Среди частых вопросов пользователей, особенно после того, как они сталкиваются с тем, что какая-то из библиотек DLL отсутствует в Windows 10, Windows 11 или других версиях системы — как зарегистрировать DLL в соответствующей версии ОС.
В этой инструкции подробно о способах регистрации библиотек DLL в Windows x64 и x86 (32-бит) с помощью regsvr32.exe (и кратко о regasm.exe), о возможных нюансах и проблемах, которые могут возникнуть в процессе.
Регистрация библиотеки DLL в Windows 10, Windows 11 и предыдущих версий системы
Дальнейшие шаги описаны в предположении, что DLL, которую нужно зарегистрировать, уже находится в нужном расположении: папке C:\Windows\System32, C:\Windows\SysWOW64 или, в некоторых случаях — отдельных папках программ, к которой относится соответствующая библиотека, например, для 1С — C:\Program Files\1cv8\номер_версии\bin (или Program Files x86 в случае 32-битной версии).
Прежде чем приступить к регистрации библиотеки, учитывайте следующие моменты:
- В x64 версиях Windows 64-битные DLL хранятся в System32, а 32-битные — в SysWOW64 (у некоторых начинающих пользователей бывает обратное предположение исходя из имён папок).
- Файлы DLL x64 и x86 (32-бит) — это разные файлы. И если прямого указания на разрядность в месте загрузки файла нет, то чаще это 32-битный файл (что не мешает ему работать в x64 системе), но это не всегда так.
- Для регистрации библиотеки DLL используется системный инструмент regsvr32.exe, который также доступен в двух версиях, которые лежат в папках System32 и SysWOW64 (в случае 64-битных систем). По умолчанию при описываемых далее действиях запускается x64 версия.
- 32-битным программам и играм (по умолчанию устанавливаются в Program Files x86 в 32-битных системах) для работы нужны 32-битные DLL, не зависимо от разрядности Windows.
Сам процесс регистрации в общем случае состоит из следующих шагов:
- Нажмите клавиши Win+R на клавиатуре (Win — клавиша с эмблемой Windows). Также можно нажать правой кнопкой мыши по кнопке «Пуск» в Windows 11 или Windows 10 и выбрать пункт контекстного меню «Выполнить».
- Введите команду regsvr32.exe путь_к_файлу (если путь к файлу содержит пробелы, возьмите весь путь в кавычки), например, для регистрации библиотеки DLL COMCNTR.DLL в 1С (для 64-бит) команда может иметь вид:
regsvr32.exe "C:\Program Files\1cv8\8.3.19.1150\bin\comcntr.dll"
Если DLL находится в System32, полный путь указывать не обязательно, достаточно простого имени файла, как на изображении ниже.

Возможна и неудача — сообщение об ошибке «Модуль dll загружен, но точка входа DllRegisterServer не найдена. Проверьте, что файл является правильным файлом DLL или OCX и повторите попытку». Подробнее об ошибке — в следующем разделе статьи.

Почему не удается зарегистрировать DLL
Ошибка при регистрации с помощью regsvr32 вида «Точка входа DllRegisterServer не найдена» говорит о том, что эта библиотека DLL не поддерживает регистрацию описанным методом. Можно попробовать использовать вариант команды:
regsvr32 /i /n путь_к_файлу.dll
но с большой вероятностью и это не поможет.
Видео
Надеюсь, цель достигнута, а количество вопросов, связанных с регистрацией DLL в Windows, уменьшилось.
А вдруг и это будет интересно:
- Лучшие бесплатные программы для Windows
- Тормозит мышь в Windows — варианты решения
- Как удалить пользователя Windows 11
- В манифесте указана неизвестная структура в Microsoft Store — варианты решения
- Как добавить комментарии, теги и рейтинги к папке Windows
- Не удается войти в учетную запись Windows — как исправить?
- Windows 11
- Windows 10
- Android
- Загрузочная флешка
- Лечение вирусов
- Восстановление данных
- Установка с флешки
- Настройка роутера
- Всё про Windows
- В контакте
- Одноклассники
-
Даниил 07.07.2020 в 13:27
- Dmitry 07.07.2020 в 14:49
- Карина 03.03.2023 в 00:12
- Dmitry 03.03.2023 в 14:18
