Що таке dll?


90

Це може бути дуже нубі-питанням, але в сучасному світі розробки веб-додатків багатьом програмістам не потрібно багато мати справу з dll, а отже, не турбуються про те, щоб дізнатися про їх призначення.

Отже, що таке dll?

  1. Для чого він використовується?
  2. Як це працює?
  3. Як ви його створюєте?
  4. У яких ситуаціях доцільно створити такий?

Мені сказали, що dll використовуються для зберігання бібліотек функцій, але крім цього я не знаю багато. Сподіваюся, хтось тут може мене просвітлити, щоб я нарешті перестав дивуватися, що роблять усі ці файли .dll у моєму каталозі Windows.


Вікі-спільноти слід використовувати у випадках, коли фактичних відповідей на ваше запитання немає. Це дійсне запитання, і, вибравши режим wiki спільноти, ви забороняєте собі та відповідачам отримувати репутацію у цьому питанні.
Cody Brocious

це питання може стати дуже популярним
Тамаш Чінеге

1
Ви думаєте? Можливо, щодо переглядів, але, швидше за все, не для голосів ... У будь-якому випадку на це вже давали відповіді 4 рази.
Omar Kooheji

2
це тривіально googleable ...
annakata

3
Так, це можна погуглити, але я насправді не знайшов багато хороших стислих пояснень цього, особливо для питання про його створення та коли це доречно використовувати.
Даніель

Відповіді:


55

DLL - це динамічна бібліотека посилань. Це колекція коду та / або даних, яка може використовуватися декількома програмами (або іншими бібліотеками / модулями).

Так, наприклад, загальні методи обробки файлів, роботи з компонентами графічного інтерфейсу тощо доступні в бібліотеках, тому декілька програм можуть використовувати одну і ту ж функціональність. Це не тільки зменшує необхідність створювати однакові матеріали кілька разів, але й гарантує, що, наприклад, загальні діалоги однакові між програмами.

Бібліотеки можна завантажувати під час виконання і таким чином розподіляти між різними паралельними програмами. Це називається динамічним зв'язуванням.

У деяких випадках бібліотека може бути включена в саму програму. Це відоме як статичне зв’язування. Статичне зв’язування полегшує розгортання за рахунок гнучкості, оскільки кожен додаток завантажує одну і ту ж копію DLL.

Однак статичне посилання не завжди є варіантом. Наприклад, ви не можете статично пов’язати програму .NET. Користувач повинен мати бібліотеки .NET для запуску програми .NET, і бібліотеки (або збірки, як їх називають у .NET) завантажуються під час виконання.

Бібліотеки DLL створюються тими ж інструментами, що використовуються для створення додатків. Конкретні деталі дуже сильно залежать від використовуваних інструментів.


Дякую за відповідь, мені цікаво одне: як додатки знають, які функції доступні в dll? Сама dll - це все машинний код, чи не так? Отже, як виставляються підписи публічної функції в dll?
Даніель

Я не знаю про більшість мов, але автозаповнення Visual Studio покаже вам усі доступні функції.
Грант

1
Але як автозаповнення з’ясувати, які доступні функції, якщо dll - це просто машинний код?
Даніель

2
Машини можуть читати машинний код. Бібліотеки DLL можуть містити значки, рядки, шрифти. Напевно є десь там список того, що він містить.
Грант

1
Visual C ++ містить інструмент, який називається dumpbin - запуск "dumpbin / export whatever.dll" підкаже, які функції та інше експортуються (тобто доступні для використання програмами, які завантажують DLL).
Graeme Perrow

29

DLL = Бібліотека динамічних посилань

Назва насправді цілком описує те, що вони роблять.

Бібліотека

Дозволяє ізолювати код для конкретного проблемного домену в одному місці. Потім поділіться цим між кількома програмами. Бібліотеку можна в будь-який час замінити на іншу, щоб виправити помилки або додати функціональність.

Посилання

Ви можете "прив'язати" бібліотеку до програми, щоб логіка в бібліотеці не компілювалася безпосередньо в програмі.

Динамічний

Бібліотеку можна завантажити на вимогу. Замість того, щоб завантажувати мамонтовий єдиний EXE в пам’ять, ОС може завантажувати лише ті частини, які потрібні. Крім того, якщо DLL спільно використовується між програмами, ОС може оптимізувати спосіб завантаження бібліотеки та розподіляти її між програмами.


10

Файли DLL (бібліотека динамічних посилань) можна охарактеризувати як невеликі "підпрограми", які покликані допомогти більшій програмі добре працювати. Вони забезпечують засіб зв'язування різних апаратних та програмних ресурсів (у різні моменти його сеансів виконання) з основною виконуваною програмою, на якій вони базуються, за принципом "у міру необхідності". Це позбавляє від необхідності завантажувати все, що стосується основної виконуваної програми, в оперативну пам’ять комп’ютера (пам’ять з довільним доступом) при першій запуску програми.

Ресурси програмного забезпечення, що переносяться DLL, включають код для різних програмних функцій, які насправді не потрібні для підтримання роботи програми, тобто функцій, які потрібно викликати лише в певний час протягом даного обчислювального сеансу і, можливо, навіть не потребують викликати взагалі. Завантаження цих функцій (а їх може бути значна кількість для даної програми) в оперативну пам’ять комп’ютера при першому запуску програми, а потім збереження їх там протягом сеансу було б марною тратою місця в ОЗУ - що вважається премія.

Основний прогрес:

Розвиток бібліотек DLL стало серйозним прогресом у обчислювальній техніці, тому що до того, як вони стали доступними, все, що стосується програми (включаючи функції, які рідко використовувались), потрібно було завантажувати в оперативну пам'ять при першому завантаженні програми. Це призвело до надзвичайно неефективних обчислень, із зниженою швидкістю, яку демонстрували різні програми. Також було надзвичайно важко виконувати багатозадачні дії, запускаючи навіть пару простих програм, через супутнє напруження оперативної пам'яті.

Міркування:

Бібліотеки DLL, як правило, залежать від версії. Ті, які працюють, скажімо, з версією 1 програми (або мовою програмування, як це може бути), можуть не працювати з версією 2. Загальне правило полягає в тому, що бібліотеки DLL у старій версії, як правило, не можуть працювати добре з новою версією, але версії з нової версії, як правило, можуть непогано працювати зі старою версією програми або мовою програмування.


7

Бібліотека з динамічним зв’язком.

Наведемо приклад. Якщо у вас завантажено чужу DLL, у програму ви можете використовувати біти програмування з неї.

Ви можете завантажити DLL, яка генерує випадкові числа, які завжди починаються з "5" або щось інше.

У вашій програмі ви можете зателефонувати CrazyDLL.GenerateRandomNumbersSorta (), і вона поверне номер.

Для реального прикладу у мене є бібліотека DLL, яка поєднує 4 текстових поля (ви б використовували їх для введення IP-адрес), і вона автоматично приймає лише цифри менше 256 і обробляє натискання клавіші повернення назад, щоб перейти до попереднього текстового поля.

Я створив DLL з цим кодом, і тепер мені потрібно лише перетягнути більше цих колекцій текстових полів IP-адреси, не повторюючи весь цей код знову і знову.

Ця ж DLL також має функцію для перетворення IP-адрес у шістнадцяткові рядки та інший корисний код.



1

DLL = Бібліотека динамічного завантаження . Як вам сказали, це в основному сукупність функцій, класів С ++ та / або глобальних змінних. Ви можете завантажувати DLL статично (тобто ОС завантажує її автоматично при запуску вашої програми) або динамічно (ваша програма явно завантажує її), тоді функції та речі всередині DLL будуть доступні вашій програмі.

Створення такого схоже на створення EXE, за винятком того, що не потрібно мати main()функції. Існують вказівки компонувальника, які вказують лінкеру створювати DLL, а не EXE.

Основною причиною того, що ви хочете це зробити, є інкапсуляція деякого коду в одному місці та використання його з декількох exe-кодів, а не прив'язка коду до кожного з них.

Дещо історична причина полягає в тому, що ваш exe може бути меншим, оскільки частина коду фізично знаходиться в іншому файлі. Це означає, що обсяг місця, який займає в пам’яті ваш exe, може бути меншим. У сучасних системах це проблема менше, ніж раніше, хоча це все ще може бути проблемою для Windows Mobile.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.