Что такое dll hell
DLL hell (DLL-кошмар, буквально: DLL-ад) — тупиковая ситуация, связанная с управлением динамическими библиотеками DLL в операционной системе Microsoft Windows.
Аналогичная проблема в других ОС носит название Dependency hell.
Сущность проблемы заключается в конфликте версий DLL, призванных поддерживать определённые функции. DLL hell — пример плохой концепции программирования, которая, подобно скрытой мине, приводит к резкому возрастанию трудностей при усложнении и совершенствовании системы.
Summary
I think it's safe to say nothing is too easy about this subject, but I hope I was able to clear things up.
We saw how dependency conflicts can appear with simple library references. We saw why using binding redirects can be problematic and lead to runtime exceptions. And we saw a bunch of ways to solve version conflicts.
In almost all cases, the version conflict will be resolved by adjusting versions and a few binding redirects. In fact, since Visual Studio adds those binding redirects automatically, you mostly won't even know you had a conflict. Still, problems somehow manage to occur and I had to use all of the solutions mentioned (well, except for 3.2) at one time or another.
Comments are closed.
Описание проблемы
По исходному замыслу, DLL должны быть совместимыми от версии к версии и взаимозаменяемыми в обе стороны.
Реализация механизма DLL такова, что несовместимость и невзаимозаменяемость становится скорее правилом, чем исключением, что приводит к большому количеству проблем.
- Отсутствие стандартов на имена, версии и положение DLL в файловой структуре приводит к тому, что несовместимые DLL легко замещают или отключают друг друга
- Отсутствие стандарта на процедуру установки приводит к тому, что установка новых программ приводит к замещению работающих DLL на несовместимые версии
- Отсутствие поддержки DLL со стороны компоновщиков и механизмов защиты приводит к тому, что несовместимые DLL могут иметь одинаковые имя и версию
- Отсутствуют стандартные инструменты идентификации и управления системой DLL пользователями и администраторами
- Использование отдельных DLL для обеспечения связи между задачами приводит к нестабильности сложных приложений
Для избежания конфликтов обычно используют множество избыточных копий DLL для каждого приложения, что сводит на нет исходную идею получения преимущества от DLL как стандартных модулей, хранящихся один раз в памяти и разделяемых многими задачами. Кроме того, при таком опыте после исправления ошибок в DLL или восстановления системы из архива количество различных DLL, носящих одно и то же имя и выполняющих те же функции, возрастает, а автоматическое обновление версии или исправление ошибок становится невозможным.
Ссылки
Напишите отзыв о статье "DLL hell"
Possible Solutions
Everything can be solved in software, one way or another, so let's see some solutions.
См. также
-
, утилита, показывающая экспортируемые и импортируемые функции файлов DLL и EXE.
2. Binding redirects
We can forcefully tell our process which assembly to load in case of a conflict using binding redirects. To make this work, we’ll need to add something like the following code to the app.config of the startup assembly:
In this example, whenever the runtime wants to load Newtonsoft.Json of version 0 to 12, it will instead load version 8.0.3. This won't cause any runtime exceptions unless there's a method call that doesn't exist in the loaded Newtonsoft.Json .
This method is the easiest and the most common one to solve version conflicts. In fact, Visual Studio adds binding redirects automatically (by default) when you add a NuGet package. Note the Auto-generate binding redirects checkbox in your project properties.
Binding redirects solve many conflicts without issues, even when there are different major versions. In many cases, a higher version assembly will be loaded, and if there isn't too much deprecated API, it will be enough.
Sometimes binding redirects aren't enough though. If one of the libraries calls a non-existent method or uses parameters that aren't valid in the loaded version, it leads to a runtime exception. So if you can't make versions fit and binding redirects aren't enough, there are ways to load assemblies of different versions side-by-side.
DLL Hell
But if you think this architecture solved all our problems, you will be disappointed. We still have problems, just different ones.
Описание проблемы
По исходному замыслу, DLL должны быть совместимыми от версии к версии и взаимозаменяемыми в обе стороны.
Реализация механизма DLL такова, что несовместимость и невзаимозаменяемость становится скорее правилом, чем исключением, что приводит к большому количеству проблем.
- Отсутствие стандартов на имена, версии и положение DLL в файловой структуре приводит к тому, что несовместимые DLL легко замещают или отключают друг друга
- Отсутствие стандарта на процедуру установки приводит к тому, что установка новых программ приводит к замещению работающих DLL на несовместимые версии
- Отсутствие поддержки DLL со стороны компоновщиков и механизмов защиты приводит к тому, что несовместимые DLL могут иметь одинаковые имя и версию
- Отсутствуют стандартные инструменты идентификации и управления системой DLL пользователями и администраторами
- Использование отдельных DLL для обеспечения связи между задачами приводит к нестабильности сложных приложений
Для избежания конфликтов обычно используют множество избыточных копий DLL для каждого приложения, что сводит на нет исходную идею получения преимущества от DLL как стандартных модулей, хранящихся один раз в памяти и разделяемых многими задачами. Кроме того, при таком опыте после исправления ошибок в DLL или восстановления системы из архива количество различных DLL, носящих одно и то же имя и выполняющих те же функции, возрастает, а автоматическое обновление версии или исправление ошибок становится невозможным.
Ссылки
Wikimedia Foundation . 2010 .
Содержание
Полезное
Полезное
Меры против DLL hell
Данные меры рекомендуют предпринимать одновременно для получения наилучшего результата:
- подсчитать контрольную сумму кода функции вызываемой из DLL - сравнить с контрольной суммой функции используемой при написании программы.
- Операционная система должна поставляться совместно с менеджером пакетов, чтобы иметь возможность прослеживать все взаимозависимости DLL, при этом использование менеджера пакетов должно поощряться, а индивидуальная инсталляция DLL — по возможности отвергаться.
- Централизованное распространение библиотек
- Допустить возможность параллельного использования нескольких версий одной и той же DLL [1].
- При модификации программного обеспечения для частного использования поставлять также модифицированные версии DLL.
- Во время проектирования DLL должна тщательно продумываться концепция функций и версий. DLL не должны использоваться без необходимости, а библиотеки, связанные только с одним приложением, должны подключаться статически (в EXE-файл).
Содержание
3. Loading different-version assemblies side by side
Before moving forward with any of the techniques described below, be sure to understand the risks here. A library isn't aware that another version of itself lives in the same process. This means that any resource that the library uses can cause all kinds of trouble. Like logging to the same file, using a Mutex with the same name, or any number of things you can't foresee.
So now that you understand that loading libraries side-by-side is a bad idea, let's proceed to see how to load libraries side-by-side.
There are several ways to do that. Note that some of those work just for strong-named assemblies.
3.1. Using AssemblyResolve event – The AppDomain.CurrentDomain.AssemblyResolve event is fired when an assembly fails to load. This might happen when the same assembly of a different version is already loaded. You can use this opportunity to ignore the error and forcefully load the other version of the assembly side-by-side. While this feels like a hack, this is the easiest way to achieve side-by-side loading and it works both for strong-named assemblies and for those that aren't.
3.2. Use to load assemblies from different folders – This method requires your libraries to have strong names. You can place the different versions of the libraries in different folders and instruct the runtime which folder to use for which version.
3.3. Use the Global Assembly Cache – This method also requires your libraries to have strong names. Instead of referencing the libraries and copying them to the output bin folder, you can install them to the GAC. The runtime will know to load the correct versions side by side.
3.4. Repack your libraries into a new assembly – You can prevent a version conflict altogether by renaming the library and its references. You won't be able to do it manually because of the way the CLR loads assemblies, but there are solutions like ILMerge and il-repack that can do that for you. They take care of issues like strong names and can merge assemblies and their references into a new target assembly with a different name.
Цели введения 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, что свело на нет преимущества изначального принципа модульности.
среда, 11 ноября 2015 г.
Modern DLL Hell problems
A modern application depends on dozens of libraries that are usually consumed as NuGet packages. Each of those libraries depends on a dozen other libraries. And each one of those… well you get the idea. Reusing code is so simple nowadays, that even a simple program comes with hundreds of dependencies.
Consider that some of those dependencies might be shared. Libraries like Newtonsoft.Json or Serilog are so common that every other applications or library uses them. So what happens if one of your hundred libraries depend on a different version of Newtonsoft.Json or Serilog? Here lies the problem.
Your startup project references Newtonsoft.Json version 8, while Library B references Newtonsoft.Json version 9. This can easily create a conflict. You could make this work at runtime (with binding redirects) but it can lead to all sorts of trouble. The trouble depends on which version ends up being loaded. If it's version 8, then Library A can call a non-existent method, that exists only in version 9, and fail at runtime. And if version 9 were to be loaded, then the same could happen with the startup project. In this case, you could probably update your startup project to use Newtonsoft.Json version 9. But this same problem can manifest in a more troublesome manner, like this:
This is called the Diamond Dependency Conflict and it can appear in many forms. Unlike in the first scenario, you can't (easily) change the code of the libraries, which makes things more difficult.
Примеры использования DLL в разных языках
Смотреть что такое "DLL" в других словарях:
DLL — steht in der Informatik für: Dynamic Link Library, Dynamische Verbindungsbibliothek Dynamic Link Loader, ein Bestandteil des Betriebssystems BS2000 Data Link Layer, die Sicherungsschicht im OSI Modell den Davis Logemann Loveland Algorithmus zur… … Deutsch Wikipedia
DLL — [Abk. für Dynamic Link Library, »dynamische Bibliothek (von Programmverbindungen)«], eine Datei, die nach dem Bibliothekskonzept (Bibliothek) angelegt und genutzt wird. Dabei werden Routinen nicht dauerhaft mit dem Maschinencode eines Programms … Universal-Lexikon
.dll — dll, Erweiterung für eine DLL Datei (DLL) … Universal-Lexikon
DLL — may refer to: Data link layer, a layer in the OSI network architecture model Delay locked loop, a device to reduce clock skew in digital circuits Doubly linked list, a data structure in computer programming Dynamic link library, or a DLL file, as … Wikipedia
Dll — ist eine Abkürzung in der Informatik für: Dynamic Link Library, Dynamische Verbindungsbibliothek Dynamic Link Loader, ein Bestandteil des Betriebssystems BS2000 den Davis Logemann Loveland Algorithmus zur Lösung des Erfüllbarkeitsproblems Double… … Deutsch Wikipedia
DLL — es el acrónimo de Dynamic Linking Library (Bibliotecas de Enlace Dinámico), término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda del programa por parte del sistema operativo. Esta denominación se refiere a … Enciclopedia Universal
DLL — (dynamic link library) (Computers) file containing the executable routines of a program (in the operating systems Windows and OS/2) … English contemporary dictionary
DLL — (computing) abbrev Dynamic link library * * * Computing abbr. dynamic link library, a collection of subroutines stored on disk, which can be loaded into memory and executed when accessed by a running program … Useful english dictionary
Dll — Bibliothèque logicielle Pour les articles homonymes, voir Bibliothèque (homonymie) et DLL. En informatique, une bibliothèque ou librairie[1] logicielle (ou encore, bibliothèque de programmes) est un ensemble de fonctions utilitaires, regroupées… … Wikipédia en Français
DLL — ▪ computer code file in full dynamic link library a file containing code for commonly used program functions on personal computers (personal computer) (PCs) that run the Microsoft Corporation s Windows operating system. Linking is… … Universalium
. when altering one's mind becomes as easy as programming a computer, what does it mean to be human.
История проблемы
Эта проблема возникла в ранних версиях Microsoft Windows.
С подобными же проблемами сталкивались ранние версии Mac OS X, но с использованием других технологий. Не избегают подобных проблем дистрибуторы библиотек Open Source.
Поэтому, когда речь идёт о не-майкрософтовской среде, эту ситуацию называют dependency hell (кошмар зависимостей).
Проблема постоянно повторяется, когда программу пытаются запустить не с той DLL, c которой она тестировалась, что показывает изначальную порочность общей концепции, позволяющей произвольную замену версий модулей.
Экспорт в DLL
Delphi
C и C++
Пример компиляции абстрактных файлов a.cpp и b.cpp в res.dll из командной строки при помощи GCC:
Меры против DLL hell
Данные меры рекомендуют предпринимать одновременно для получения наилучшего результата:
История проблемы
Эта проблема возникла в ранних версиях Microsoft Windows.
С подобными же проблемами сталкивались ранние версии Mac OS X, но с использованием других технологий. Не избегают подобных проблем дистрибуторы библиотек Open Source.
Поэтому, когда речь идёт о не-майкрософтовской среде, эту ситуацию называют dependency hell (кошмар зависимостей).
Проблема постоянно повторяется, когда программу пытаются запустить не с той DLL, c которой она тестировалась, что показывает изначальную порочность общей концепции, позволяющей произвольную замену версий модулей.
Выбираемся из DLL Hell
Это перевод Getting Out of DLL Hell. Автор: Реймонд Чен.
DLL HELL. Проблема настолько коварна, что она имеет своё собственное негативное прозвище. Вы устанавливаете одну программу, и вдруг какая-то другая, казалось бы, не связанная программа перестаёт работать. Это потому, что, хотя вам это неизвестно, но две программы связаны через общий файл DLL. Эти две программы могут иметь различные идеи о том, какую версию файла MSVCRT.DLL нужно хранить в системном каталоге. Или первая программа может обновить элемент управления ActiveX, который также использует вторая программа - сделать обновление, с которым вторая программа не полностью совместима.
Если обе программы имеют важное значение для повседневных операций вашей компании, то для вас, на самом деле, не имеет значения, какая программа виновата. Важно то, что вам нужно заставить работать их обе. Существует не так много различий между "Мы теряем деньги" и "Мы теряем деньги из-за Боба". В любом случае ваша компания теряет деньги - и это ваша работа, решить эту проблему сразу.
Когда-то давно вам приходилось выбирать какая программа "выиграла", а какая - "проиграла". Но сейчас (начиная с Windows 2000) вам доступны способы разрешения таких конфликтов. Эти способы, однако, являются лишь временными решениями, чтобы вернуть вашу систему в рабочее состояние, пока вы/разработчики программ исследуете более постоянное решение конфликта.
В Windows 2000 реализована минимальная версия технологии, поставляемой сейчас под модным названием Dynamic-Link Library Redirection (перенаправление библиотек динамической компоновки). Чтобы включить перенаправление библиотеки DLL, создайте файл с тем же именем, что и файл программы, для библиотек DLL которой требуется перенаправление, но добавив .local к имени файла. Например, чтобы использовать перенаправление для программы C:\Program Files\Litware Inc\Invoice.exe следует создать файл C:\Program Files\Litware Inc\Invoice.exe.local . Содержимое файла не имеет значения; важен сам факт существования этого файла.
После включения перенаправления для программы все попытки этой программы загрузить библиотеку DLL сначала приведут к поиску в той папке, где расположен файл программы, и лишь затем — в обычных местах. Поэтому в случае конфликта между различными файлами MSVCRT.DLL можно включить перенаправление для каждой из программ и поместить копии файлов MSVCRT.DLL для частного использования в папку установки каждой программы. После этого каждая программа будет использовать свою собственную версию библиотеки MSVCRT.DLL , а именно ту версию, с которой выполнялось тестирование программы.
Волшебство этого метода заключается ещё и в том, что он работает даже тогда, когда программа использует полный путь для загрузки библиотеки DLL. Например, представим себе, что программа пытается загрузить библиотеку C:\Program Files\Common Files\Proseware Inc\taxplugin.dll . После обновления до версии Proseware 2.0 вы обнаруживаете, что подключаемые модули расчета налогов несовместимы с программой подготовки счетов. Вы можете скопировать старую версию подключаемого модуля расчета налогов в C:\Program Files\Litware Inc\taxplugin.dll . Даже несмотря на то, что при загрузке подключаемого модуля расчета налогов используется полный путь, перенаправление библиотек DLL сначала выполнит поиск в текущей папке и будет использовать локальную копию вместо копии в папке «Proseware Inc».
В операционных системах Windows XP и выше правила перенаправления библиотек DLL немного отличаются, но общий принцип остается тем же. Кроме создания файла с расширением « local » можно создать и папку с таким расширением. В этом случае поиск будет выполняться в папке с расширением « local », а не в папке установки программы. Это позволяет использовать перенаправление для нескольких программ в одной папке, не создавая конфликтов. К примеру, если у программы из примера выше существует папка C:\Program Files\Litware Inc\Invoice.exe.local , то будет загружена DLL C:\Program Files\Litware Inc\Invoice.exe.local\taxplugin.dll .
Осталось только заметить что .local файлы и папки игнорируются, если приложение использует манифесты для управления зависимостями.
Перенаправление библиотек DLL не позволит полностью избежать кошмара библиотек DLL, но, по крайней мере, оно предоставляет средства первой помощи для контроля над ситуацией на время решения проблемы.
Содержание
Subscribe
Join the mailing list and get updates on new articles
Отрывок, характеризующий DLL hell
– Я не во время кажется, – сказал он, – я бы не приехал, но мне дело есть, – сказал он холодно…
– Нет, я только удивляюсь, как ты из полка приехал. – «Dans un moment je suis a vous», [Сию минуту я к твоим услугам,] – обратился он на голос звавшего его.
– Я вижу, что я не во время, – повторил Ростов.
Выражение досады уже исчезло на лице Бориса; видимо обдумав и решив, что ему делать, он с особенным спокойствием взял его за обе руки и повел в соседнюю комнату. Глаза Бориса, спокойно и твердо глядевшие на Ростова, были как будто застланы чем то, как будто какая то заслонка – синие очки общежития – были надеты на них. Так казалось Ростову.
– Ах полно, пожалуйста, можешь ли ты быть не во время, – сказал Борис. – Борис ввел его в комнату, где был накрыт ужин, познакомил с гостями, назвав его и объяснив, что он был не статский, но гусарский офицер, его старый приятель. – Граф Жилинский, le comte N.N., le capitaine S.S., [граф Н.Н., капитан С.С.] – называл он гостей. Ростов нахмуренно глядел на французов, неохотно раскланивался и молчал.
Жилинский, видимо, не радостно принял это новое русское лицо в свой кружок и ничего не сказал Ростову. Борис, казалось, не замечал происшедшего стеснения от нового лица и с тем же приятным спокойствием и застланностью в глазах, с которыми он встретил Ростова, старался оживить разговор. Один из французов обратился с обыкновенной французской учтивостью к упорно молчавшему Ростову и сказал ему, что вероятно для того, чтобы увидать императора, он приехал в Тильзит.
– Нет, у меня есть дело, – коротко ответил Ростов.
Ростов сделался не в духе тотчас же после того, как он заметил неудовольствие на лице Бориса, и, как всегда бывает с людьми, которые не в духе, ему казалось, что все неприязненно смотрят на него и что всем он мешает. И действительно он мешал всем и один оставался вне вновь завязавшегося общего разговора. «И зачем он сидит тут?» говорили взгляды, которые бросали на него гости. Он встал и подошел к Борису.
– Однако я тебя стесняю, – сказал он ему тихо, – пойдем, поговорим о деле, и я уйду.
– Да нет, нисколько, сказал Борис. А ежели ты устал, пойдем в мою комнатку и ложись отдохни.
– И в самом деле…
Они вошли в маленькую комнатку, где спал Борис. Ростов, не садясь, тотчас же с раздраженьем – как будто Борис был в чем нибудь виноват перед ним – начал ему рассказывать дело Денисова, спрашивая, хочет ли и может ли он просить о Денисове через своего генерала у государя и через него передать письмо. Когда они остались вдвоем, Ростов в первый раз убедился, что ему неловко было смотреть в глаза Борису. Борис заложив ногу на ногу и поглаживая левой рукой тонкие пальцы правой руки, слушал Ростова, как слушает генерал доклад подчиненного, то глядя в сторону, то с тою же застланностию во взгляде прямо глядя в глаза Ростову. Ростову всякий раз при этом становилось неловко и он опускал глаза.
– Я слыхал про такого рода дела и знаю, что Государь очень строг в этих случаях. Я думаю, надо бы не доводить до Его Величества. По моему, лучше бы прямо просить корпусного командира… Но вообще я думаю…
– Так ты ничего не хочешь сделать, так и скажи! – закричал почти Ростов, не глядя в глаза Борису.
Борис улыбнулся: – Напротив, я сделаю, что могу, только я думал…
В это время в двери послышался голос Жилинского, звавший Бориса.
– Ну иди, иди, иди… – сказал Ростов и отказавшись от ужина, и оставшись один в маленькой комнатке, он долго ходил в ней взад и вперед, и слушал веселый французский говор из соседней комнаты.
Ростов приехал в Тильзит в день, менее всего удобный для ходатайства за Денисова. Самому ему нельзя было итти к дежурному генералу, так как он был во фраке и без разрешения начальства приехал в Тильзит, а Борис, ежели даже и хотел, не мог сделать этого на другой день после приезда Ростова. В этот день, 27 го июня, были подписаны первые условия мира. Императоры поменялись орденами: Александр получил Почетного легиона, а Наполеон Андрея 1 й степени, и в этот день был назначен обед Преображенскому батальону, который давал ему батальон французской гвардии. Государи должны были присутствовать на этом банкете.
DLL hell (DLL-кошмар, буквально: DLL-ад) — тупиковая ситуация, связанная с управлением динамическими библиотеками DLL в операционной системе Microsoft Windows.
Аналогичная проблема в других ОС носит название Dependency hell.
Сущность проблемы заключается в конфликте версий DLL, призванных поддерживать определённые функции. DLL hell — пример плохой концепции программирования, которая, подобно скрытой мине, приводит к резкому возрастанию трудностей при усложнении и совершенствовании системы.
Ссылки
Wikimedia Foundation . 2010 .
1. Make the versions fit
The best way to solve version conflicts is to prevent these conflicts in the first place. If you can change dependencies to use the same library version, then that's the best policy. In the case of a diamond dependency conflict, updating the libraries sometimes changes their referenced libraries, which can match the right versions.
- MAJOR is incremented when you make incompatible API changes
- MINOR is incremented when you add functionality in a backward-compatible manner
- PATCH is incremented when you make backward-compatible bug fixes
Not everyone follows conventions, but if they do, then the requirement is just to match major versions, not the exact version. When two projects reference a library with the same major version, make sure that the highest referenced version of that library is loaded into the process. This can be done with binding redirects (see further on). For example, if Library A references Newtonsoft.Json version 8.0.1 and Library B references version 8.2.1, then you should load 8.2.1 or risk that method calls from Library B will fail.
Of course, changing the library code in this manner is not very recommended. For one thing, you will no longer depend on a NuGet package, which will make updating much harder.
Импорт из DLL
Visual Basic
Функция должна быть объявлена в TLB, а TLB подключена к проекту. Именно этот механизм в VB используется для импорта всех «встроенных» функций (таких как MsgBox, Round, и т. д.) из runtime-библиотеки.
Delphi
C и C++
Смотреть что такое "DLL hell" в других словарях:
DLL Hell — Saltar a navegación, búsqueda El término DLL Hell (infierno de las DLL) se refiere a los problemas ocasionados por las DLL (bibliotecas de enlace dinámico). Estas bibliotecas consisten en un conjunto de código común que puede estar compartido… … Wikipedia Español
DLL hell — In computing, DLL hell is a colloquial term for the complications that arise when working with dynamic link libraries, (DLLs), used with Microsoft Windows operating systems.Although the term is Windows specific, and the more general term is… … Wikipedia
DLL Hell — In computing, DLL Hell is a term for the complications that arise when working with dynamic link libraries (DLLs) used with Microsoft Windows operating systems,[1] particularly legacy 16 bit editions which all run in a single memory space. While… … Wikipedia
DLL Hell — Der Ausdruck DLL Konflikt (auch DLL Hell, deutsch: „DLL Hölle“ genannt) bezeichnet ein Problem, das durch die Installation von Dynamic Link Library (DLLs) auf den Betriebssystemen der Windows Reihe (Windows 3.x, Windows 9x, Windows ME, Windows NT … Deutsch Wikipedia
DLL Hell — El término DLL Hell (El infierno de las DLLs) se refiere a los problemas ocasionados por las DLLs (Bibliotecas de enlace dinámico). Estas bibliotecas consisten en un conjunto de código común que puede estar compartido entre varias aplicaciones.… … Enciclopedia Universal
DLL hell — noun Problems caused by incompatible versions of a DLL (dynamic link library). A more succinct way to say this is that the versioning the CLR enforces for strong named assemblies means the end of DLL hell … Wiktionary
DLL — (англ. Dynamic link library динамически подключаемая библиотека) понятие операционных систем Microsoft Windows и IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями. K DLL… … Википедия
Hell (disambiguation) — Hell, according to many religious beliefs, is a place of suffering during afterlife where the wicked or unrighteous souls are punished.* Hell in Christian beliefs * Hell in popular culture * Problem of Hell, a variant of the problem of evil *… … Wikipedia
DLL-Hölle — Der Ausdruck DLL Konflikt (auch DLL Hell, deutsch: „DLL Hölle“ genannt) bezeichnet ein Problem, das durch die Installation von Dynamic Link Library (DLLs) auf den Betriebssystemen der Windows Reihe (Windows 3.x, Windows 9x, Windows ME, Windows NT … Deutsch Wikipedia
DLL-Konflikt — Der Ausdruck DLL Konflikt (auch DLL Hell, deutsch: „DLL Hölle“ genannt) bezeichnet ein Problem, das durch die Installation von Dynamic Link Library (DLLs) auf den Betriebssystemen der Microsoft Windows Reihe entstehen kann. Vorwiegend sind ältere … Deutsch Wikipedia
DLL (англ. Dynamic-link library — динамически подключаемая библиотека) — понятие операционных систем Microsoft Windows и IBM OS/2; динамическая библиотека, позволяющая многократное применение различными программными приложениями. K DLL относятся также элементы управления ActiveX и драйверы. В мире UNIX аналогичные функции выполняют т. н. shared objects («разделяемые объекты»).
Формат файлов DLL придерживается тех же соглашений, что и формат исполняемых файлов, сочетая код, таблицы и ресурсы.
См. также
- Side-by-side assembly
- Защита файлов Windows
- Защита ресурсов Windows
- Компоновщик
- Динамически подключаемая библиотека
- Global Assembly Cache
Подгрузка и импорт из DLL во время работы
Visual Basic
C и C++
Delphi
Читайте также: