Co to jest dll?

91

To może być bardzo mało interesujące pytanie, ale w dzisiejszym świecie tworzenia aplikacji internetowych wielu programistów nie musi zbytnio zajmować się bibliotekami DLL, a zatem nie zawraca sobie głowy poznaniem ich przeznaczenia.

Więc co to jest dll?

  1. Do czego jest to używane?
  2. Jak to działa?
  3. Jak je tworzysz?
  4. W jakich sytuacjach stworzenie takiego jest właściwe?

Powiedziano mi, że biblioteki dll są używane do przechowywania bibliotek funkcji, ale poza tym niewiele wiem. Mam nadzieję, że ktoś tutaj może mnie oświecić, więc w końcu mogę przestać się zastanawiać, co robią te wszystkie pliki .dll w moim katalogu Windows.

Daniel
źródło
Wiki społeczności powinno być używane w przypadkach, w których nie ma rzeczywistych odpowiedzi na twoje pytanie. To jest ważne pytanie i wybierając tryb wiki społeczności, uniemożliwiasz sobie i osobom odpowiadającym zdobycie reputacji w tym pytaniu.
Serafina Brocious
to pytanie może stać się bardzo popularne
Tamas Czinege
1
Myślisz? Może za widoki, ale mało prawdopodobne za głosy ... W każdym razie udzielono na to już 4 odpowiedzi.
Omar Kooheji
2
to jest trywialne w Google ...
annakata
3
Tak, jest to możliwe w wyszukiwarce Google, ale tak naprawdę nie znalazłem wielu dobrych, zwięzłych wyjaśnień, zwłaszcza w kwestii tworzenia takiego i tego, kiedy należy go użyć.
Daniel

Odpowiedzi:

55

Biblioteka DLL to biblioteka dołączana dynamicznie. Jest to zbiór kodu i / lub danych, które mogą być używane przez kilka aplikacji (lub inne biblioteki / moduły).

Na przykład wspólne metody przetwarzania plików, pracy z komponentami GUI itp. Są udostępniane w bibliotekach, więc kilka aplikacji może korzystać z tej samej funkcjonalności. To nie tylko zmniejsza potrzebę wielokrotnego tworzenia tych samych rzeczy, ale także zapewnia, że ​​np. Wspólne okna dialogowe są takie same między aplikacjami.

Biblioteki można ładować w czasie wykonywania, a tym samym udostępniać między różnymi współbieżnymi aplikacjami. Nazywa się to dynamicznym łączeniem.

W niektórych przypadkach biblioteka może być zawarta w samej aplikacji. Nazywa się to łączeniem statycznym. Łączenie statyczne ułatwia wdrażanie kosztem elastyczności, ponieważ różne aplikacje ładują tę samą kopię biblioteki DLL.

Jednak linkowanie statyczne nie zawsze jest opcją. Np. Nie możesz łączyć statycznie aplikacji .NET. Użytkownik musi mieć biblioteki .NET, aby uruchomić aplikację .NET, a biblioteki (lub zestawy, jak są nazywane w .NET) są ładowane w czasie wykonywania.

Biblioteki DLL są tworzone za pomocą tych samych narzędzi, które są używane do tworzenia aplikacji. Konkretne szczegóły zależą w dużej mierze od użytych narzędzi.

Brian Rasmussen
źródło
Dzięki za odpowiedź, zastanawiam się tylko, skąd aplikacje wiedzą, jakie funkcje są dostępne w dll? Sam plik dll to cały kod maszynowy, prawda? Jak więc są ujawniane sygnatury funkcji publicznych w dll?
Daniel
Nie znam większości języków, ale funkcja autouzupełniania programu Visual Studio pokaże wszystkie dostępne funkcje.
Grant
1
Ale w jaki sposób autouzupełnianie dowiaduje się, jakie są dostępne funkcje, jeśli dll jest tylko kodem maszynowym?
Daniel
2
Maszyny potrafią czytać kod maszynowy. Biblioteki DLL mogą zawierać ikony, ciągi znaków, czcionki. Prawdopodobnie gdzieś tam jest lista tego, co zawiera.
Przyznaj
1
Visual C ++ zawiera narzędzie o nazwie dumpbin - uruchomienie „dumpbin / export cokolwiek.dll” powie Ci, jakie funkcje i elementy są eksportowane (tj. Są dostępne do użycia przez programy ładujące bibliotekę DLL).
Graeme Perrow
29

DLL = Dynamic Link Library

Nazwa jest właściwie dość opisowa tego, co osiągają.

Biblioteka

Umożliwia wyodrębnienie kodu określonej domeny powodującej problem w jednej lokalizacji. Następnie udostępnij to wielu aplikacjom. Bibliotekę można w dowolnym momencie zamienić na inną, aby naprawić błędy lub dodać funkcjonalność.

Połączyć

Bibliotekę można „połączyć” z aplikacją, tak aby logika w bibliotece nie była kompilowana bezpośrednio do aplikacji.

Dynamiczny

Bibliotekę można załadować na żądanie. Zamiast ładować gigantyczny pojedynczy plik EXE do pamięci, system operacyjny może załadować tylko potrzebne fragmenty. Ponadto, jeśli biblioteka DLL jest współdzielona między aplikacjami, system operacyjny może zoptymalizować sposób ładowania biblioteki i udostępniać ją między aplikacjami.

Paul Alexander
źródło
10

Pliki DLL (biblioteki dołączane dynamicznie) można opisać jako małe „podprogramy”, które mają pomóc w poprawnym działaniu większego programu. Umożliwiają one łączenie różnych zasobów sprzętowych i programowych (w różnych momentach sesji wykonawczych) z głównym programem wykonywalnym, na którym są oparte, na zasadzie „w miarę potrzeb”. Eliminuje to konieczność ładowania wszystkiego, co ma związek z głównym programem wykonywalnym, do pamięci RAM komputera (pamięci o dostępie swobodnym), gdy program jest uruchamiany po raz pierwszy.

Zasoby oprogramowania przenoszone przez biblioteki DLL obejmują kod różnych funkcji programu, które tak naprawdę nie są potrzebne do utrzymania działania programu: to znaczy funkcje, które muszą być wywoływane tylko w określonych momentach podczas danej sesji obliczeniowej i mogą nawet nie być potrzebne w ogóle być wezwanym. Załadowanie tych funkcji (a może ich być znaczna liczba dla danego programu) do pamięci RAM komputera, gdy program jest uruchamiany po raz pierwszy, a następnie trzymanie ich tam przez całą sesję byłoby marnowaniem miejsca w pamięci RAM - co uważa się za premia.

Duży postęp:

Rozwój bibliotek DLL był dużym postępem w dziedzinie przetwarzania danych, ponieważ zanim były one dostępne, wszystko, co miało związek z programem (w tym funkcje, które były rzadko, jeśli w ogóle w ogóle używane), musiało być ładowane do pamięci RAM podczas pierwszego ładowania programu. Doprowadziło to do wyjątkowo nieefektywnego przetwarzania, z wolniejszymi prędkościami wyświetlanymi przez różne programy. Niezwykle trudno było też wykonywać wiele zadań jednocześnie, uruchamiając nawet kilka prostych programów, z powodu towarzyszącego temu obciążenia pamięci RAM.

Uwagi:

Biblioteki DLL są zwykle specyficzne dla wersji. Te, które działają dobrze, powiedzmy, w wersji 1 programu (lub języku programowania, jak może się zdarzyć), mogą nie działać dobrze z wersją 2. Ogólna zasada jest taka, że ​​biblioteki DLL w starszej wersji zwykle nie działają dobrze z nowszą wersją, ale te z nowszej wersji mogą generalnie działać całkiem dobrze ze starszą wersją programu lub języka programowania.

judy smith
źródło
7

Biblioteka połączona dynamicznie.

Aby dać ci przykład, jeśli masz załadowaną bibliotekę DLL innej osoby do swojej aplikacji, możesz użyć jej fragmentów programowania.

Możesz załadować bibliotekę DLL, która generuje losowe liczby, które zawsze zaczynają się od „5” lub czegoś podobnego.

W swoim programie możesz wywołać CrazyDLL.GenerateRandomNumbersSorta () i zwróci numer.

W prawdziwym świecie mam bibliotekę DLL, która łączy 4 pola tekstowe (używałbyś ich do wpisywania adresów IP) i automatycznie akceptuje tylko liczby mniejsze niż 256 i obsługuje naciśnięcie klawisza Backspace, aby przejść do poprzedniego pola tekstowego.

Utworzyłem bibliotekę DLL z tym kodem, a teraz wszystko, co muszę zrobić, to przeciągnąć i upuścić więcej kolekcji pól tekstowych adresów IP bez konieczności wielokrotnego powielania całego tego kodu.

Ta sama biblioteka DLL ma również funkcję konwersji adresów IP na ciągi szesnastkowe i inny przydatny kod.

dotacji
źródło
1

Z biblioteki MSDN :

Biblioteka dołączana dynamicznie (DLL) to moduł zawierający funkcje i dane, które mogą być używane przez inny moduł (aplikację lub bibliotekę DLL).

Nemanja Trifunovic
źródło
1

DLL = Dynamic Load Link Library. Jak już powiedziano, jest to w zasadzie zbiór funkcji, klas C ++ i / lub zmiennych globalnych. Możesz załadować bibliotekę DLL statycznie (tj. System operacyjny ładuje ją automatycznie podczas uruchamiania programu) lub dynamicznie (Twój program ładuje ją bezpośrednio), w którym to momencie funkcje i zawartość biblioteki DLL są dostępne dla Twojego programu.

Tworzenie go jest podobne do tworzenia EXE, z wyjątkiem tego, że nie musi istnieć main()funkcja. Istnieją dyrektywy konsolidatora, które nakazują konsolidatorowi utworzenie biblioteki DLL, a nie EXE.

Głównym powodem, dla którego chcesz to zrobić, jest hermetyzacja kodu w jednym miejscu i używanie go z wielu plików exe, zamiast łączenia kodu z każdym z nich.

Nieco historycznym powodem jest to, że twój plik exe może być mniejszy, ponieważ część kodu znajduje się fizycznie w innym pliku. Oznacza to, że ilość miejsca zajmowanego w pamięci przez twój exe może być mniejsza. W nowoczesnych systemach jest to mniejszy problem niż kiedyś, chociaż nadal może być problemem w systemie Windows Mobile.

Graeme Perrow
źródło