Что такое DLL?

Переводы статьи Переводы статьи
Код статьи: 815065 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

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

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

Данная статья завершается сравнением высокого уровня библиотек DLL со сборками Microsoft .NET Framework.

ВВЕДЕНИЕ

Для операционных систем Microsoft Windows, перечисленных в разделе «Относится к», большая часть функциональных возможностей операционной системы обеспечивается с помощью библиотеки динамической компоновки (DLL). Кроме того, при запуске программы в одной из этих операционных систем Windows, большая часть функциональных возможностей Программа может предоставляться библиотеки DLL. Например некоторые программы могут содержать содержится много различных модулей и каждый модуль программы и распределенные в библиотеках DLL.

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

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

С Введение Microsoft платформа.NET Framework, у большинства проблем зависимости устранен с помощью сборок.

Дополнительная информация

Что такое DLL?

DLL — это библиотека, которая содержит код и данные, которые могут использоваться несколько программ одновременно. Например в работе Windows системы, Comdlg32 DLL выполняет общее диалоговое окно поле связанных функций. Поэтому каждой программы можно использовать функцию, которая содержится в этой библиотеке 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-ФАЙЛ удаляется с компьютера.
Эти действия известный также как конфликты DLL-библиотек. Если назад совместимость не является обязательным, программа может не успешно Запустите.

В следующем списке описываются изменения, которые были представленные в Microsoft Windows 2000 и более поздних операционных системах Windows для помочь свести к минимуму проблемы с зависимостями.
  • Защита файлов Windows
    В защиты файлов Windows позволяет операционной системе системные библиотеки DLL из обновляемой или удаляемой несанкционированного посредником. Таким образом, Когда программа установки пытается удалить или обновить библиотеку DLL, которая определяется как системных DLL защиты файлов Windows будет искать допустимый цифровыми подпись.
  • Частные библиотеки DLL
    Частные DLL позволяют изолировать программы изменения, которые сделанные в общей библиотеки DLL библиотеки DLL. Private используют сведения о версии или пустой файл .local для усиления версии библиотеки DLL, используемые программой. Для Использование закрытых библиотек DLL, найдите библиотеки DLL в корневой папке программы. Затем для новых программы, добавлять сведения о версии библиотеки DLL. Старые программы используют .local пустой файл. Каждый метод сообщает операционной системе для использования закрытый Библиотеки DLL, расположенные в корневой папке программы.

Средства устранения неполадок DLL

Об устранении неполадок DLL доступны несколько средств. Следующие средства являются некоторые из этих средств.

Dependency Walker

Просмотр Dependency Walker средство может рекурсивно для всех зависимых Библиотеки DLL, которые используются программой. При открытии программы в Dependency Walker Dependency Walker выполняет следующие проверки:
  • Средства Dependency Walker проверяет наличие отсутствующих библиотек DLL.
  • Dependency Walker проверяет файлы программы или библиотеки DLL, являющиеся недопустимо.
  • Dependency Walker проверяет, функции импорта и экспорта соответствующие функции.
  • Dependency Walker проверяет наличие циклических зависимостей. ошибки.
  • Dependency Walker ищет модули, которые не являются допустимыми Поскольку модули предназначены для другой операционной системы.
С помощью средства Dependency Walker, необходимо документировать все библиотеки DLL, Программа использует. Это может помочь предотвратить и исправить проблемы DLL, которые могут возникнуть в будущее. Dependency Walker находится в следующей директории, когда вы Установка Microsoft Visual Studio 6.0.
диск\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.
Для Дополнительные сведения о средстве DUPS щелкните следующий номер статьи следующей статье Microsoft Knowledge Base:
247957С помощью DUPS.exe для устранения проблем совместимости библиотек DLL

Разработка DLL

В этом разделе описаны проблемы и требования, которые следует учитывать при разработке собственных библиотек DLL.

Виды библиотек DLL

После загрузки библиотеки DLL в приложении два способа связывания let можно вызвать экспортированных функций 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)
Как правило используется один файл заголовка, который содержит определения инструкции и инструкции ifdef для разделения оператор экспорта и импорта инструкция.

Файл определения модуля также можно использовать для объявления экспортированных функций DLL. При использовании файла определения модуля, у вас для добавления ключевого слова function экспортированных функций DLL. В модуле файл определения объявляется и операторах ЭКСПОРТЫБИБЛИОТЕКИ для библиотеки DLL. Следующий код является примером файл определения.
// SampleDLL.def
//
LIBRARY "sampleDLL"

EXPORTS
  HelloWorld

Пример DLL и приложения

В Microsoft 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 в SampleDLL DLL.
// SampleApp.cpp 
//

#include "stdafx.h"
#include "sampleDLL.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{ 	
	HelloWorld();
	return 0;
}
Примечание В динамической компоновкой во время загрузки, необходимо связать SampleDLL.lib Библиотека импорта, который создается при построении SampleDLL проект.

В динамической компоновкой во время выполнения, используйте код, похожий на Следующий код для вызова SampleDLL.dll экспортированные функции 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 Этот порядок:
  1. Папка приложения
  2. Текущей папке
  3. Системную папку Windows

    Примечание Функции GetSystemDirectory возвращает путь к системе Windows папка.
  4. В папке Windows

    Примечание Функция GetWindowsDirectory возвращает путь к папке Windows.

Платформа.NET Framework сборки

С появлением Microsoft .NET и платформа.NET Framework, Большинство проблем, связанных с DLL удалены использование сборок. Сборка представляет собой логическую единицу функциональности, работающей под контролем .NET common language runtime (CLR). Сборки физически существует файл .dll или .exe. Тем не менее внутренне сборка очень отличается от Microsoft Win32 DLL.

Сборки файл содержит манифест сборки, метаданные типа, промежуточные Microsoft код языка (MSIL) и другие ресурсы. Манифест сборки содержит метаданные сборки, которая содержит все сведения, необходимые для сборки, с самоописанием. Следующая информация включена в манифест сборки:
  • Имя сборки
  • Сведения о версии
  • Сведения о культуре
  • Данные строгого имени
  • Список файлов сборки
  • Сведения о типах ссылок
  • Сведения о ссылочных и зависимые сборки
Код MSIL, содержащихся в сборке не может быть выполняется непосредственно. Вместо этого выполнение кода MSIL осуществляется с помощью среды CLR. По по умолчанию, при создании сборки, сборка является закрытой для приложение. Для создания общей сборки необходимо назначить строгое имя для сборки, а затем опубликовать ее в глобальной сборки кэш.

В следующем списке описываются некоторые функции сборок по сравнению с возможностями библиотеки DLL Win32:
  • С самоописанием
    При создании сборки все сведения, является требуется для среды CLR для выполнения сборки содержится в манифесте сборки. Манифест сборки содержит список зависимых сборок. Таким образом, Среда CLR может поддерживать согласованный набор сборок, используемых в приложение. В Win32 библиотеки DLL не может поддерживать согласованность между набором Библиотеки DLL, которые используются в приложении, при использовании общих библиотек DLL.
  • Управление версиями
    В манифесте сборки записываются сведения о версии и обеспечивается средой CLR. Кроме того политики версий позволяют применять использование определенной версии. В библиотеках DLL Win32, не может быть применена управление версиями Операционная система. Вместо этого необходимо убедиться, что DLL обратно совместимость.
  • Side-by-side развертывания
    Сборки поддерживают развертывание side-by-side. Одно приложение можно использовать одну версию сборки, а другое приложение может использовать другой версия сборки. Начиная с Windows 2000, является развертывание side-by-side поддерживается поиск библиотек DLL в папке приложения. Кроме того Windows Защита файлов запрещает системные библиотеки DLL перезаписывается или заменяется неправомочное лицо.
  • Изоляция и SELF-containment
    Приложения, которое разработано с помощью сборки может быть автономным и изолирована от других приложений, запущенных на компьютер. Эта возможность упрощает установку без влияния.
  • Выполнение
    Сборки выполняется с разрешениями безопасности предоставленный в сборке манифеста, которые управляются СРЕДА CLR.
  • Зависит от языка
    Сборка может быть разработан с помощью любого из поддерживаемые языки .NET. Например можно разработать сборки в корпорации Майкрософт C#, а затем воспользоваться сборки в среде Microsoft Visual Basic .NET проект.

Ссылки

Дополнительные сведения о библиотеках DLL и платформа.NET Framework сборки, посетите следующие веб-узлы корпорации Майкрософт:
Конфликты DLL-Библиотек
. http://msdn2.microsoft.com/en-us/library/ms811694.aspx

Реализация компонента side-by-side, совместное использование приложений
http://msdn2.Microsoft.com/en-us/library/ms811700.aspx

Способ построения и обслуживания изолированных приложений и сборок side-by-side для Windows XP
http://msdn2.Microsoft.com/en-us/library/ms997620.aspx

Упрощение развертывания и устранения конфликтов DLL-Библиотек с платформа.NET Framework
http://msdn2.Microsoft.com/en-US/NETFramework/aa497268.aspx

Руководство разработчика платформа.NET Framework: сборки
.aspx http://msdn2.Microsoft.com/en-us/library/hk5f40ct (vs.71)

Динамическая компоновка во время выполнения
http://msdn2.Microsoft.com/en-us/library/ms685090.aspx

Локальное хранилище потока
http://msdn2.Microsoft.com/en-us/library/ms686749.aspx

Свойства

Код статьи: 815065 - Последний отзыв: 29 апреля 2013 г. - Revision: 14.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Datacenter Edition for Itanium-Based Systems
  • Microsoft Windows Server 2003, Datacenter x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Web Edition
  • Microsoft Windows 2000 Advanced Server
  • операционная система Microsoft Windows 2000 Server
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Media Center Edition 2005 Update Rollup 2
  • Microsoft Windows XP Tablet PC Edition
  • Microsoft Windows 2000 Professional Edition
  • Microsoft Windows NT Workstation 4.0 Developer Edition
  • операционная система Microsoft Windows NT Workstation 3.51
  • Microsoft Visual Studio .NET 2003 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Academic Edition
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2002 Enterprise Architect
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Academic Edition
  • Microsoft Visual Studio 6.0 Professional Edition
  • Microsoft Visual Studio 6.0 Enterprise Edition
  • Microsoft Visual Studio 2005 Professional Edition
  • Microsoft Visual Studio 2005 Standard Edition
  • Microsoft Office XP Professional Edition
  • Microsoft Office XP Small Business Edition
  • Microsoft Office XP Standard Edition
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Small Business Edition 2003
Ключевые слова: 
kbxplatform kbtshoot kbdebug kbdll kbinfo kbmt KB815065 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: 815065

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com