Apa itu dll?

90

Ini mungkin pertanyaan yang sangat noobie, tetapi di dunia pengembangan aplikasi web saat ini banyak programmer tidak perlu berurusan dengan banyak dll, dan dengan demikian tidak repot-repot mempelajari tujuan mereka.

Jadi apa itu dll?

  1. Untuk apa itu digunakan?
  2. Bagaimana cara kerjanya?
  3. Bagaimana Anda membuatnya?
  4. Dalam situasi apa membuat satu cocok?

Saya telah diberitahu bahwa dll digunakan untuk menyimpan perpustakaan fungsi, tetapi di luar itu saya tidak tahu banyak. Semoga seseorang di sini dapat mencerahkan saya sehingga saya akhirnya bisa berhenti bertanya-tanya apa yang dilakukan semua file .dll di direktori Windows saya.

Daniel
sumber
Wiki komunitas harus digunakan untuk kasus-kasus di mana tidak ada jawaban aktual untuk pertanyaan Anda. Ini adalah pertanyaan yang valid dan dengan memilih mode wiki komunitas, Anda mencegah diri Anda dan penjawab mendapatkan reputasi dalam pertanyaan ini.
Serafina Brocious
pertanyaan ini berpotensi untuk menjadi pertanyaan yang sangat populer
Tamas Czinege
1
Kamu pikir? Mungkin untuk dilihat tapi tidak mungkin untuk voting ... Pokoknya sudah dijawab 4 kali.
Omar Kooheji
2
ini sepele googleable ...
annakata
3
Yah, ini bisa di-google, tapi saya belum menemukan banyak penjelasan singkat yang bagus tentangnya, terutama untuk pertanyaan tentang cara membuatnya dan kapan itu tepat untuk digunakan.
Daniel

Jawaban:

55

DLL adalah pustaka tautan dinamis. Ini adalah kumpulan kode dan / atau data, yang dapat digunakan oleh beberapa aplikasi (atau pustaka / modul lain).

Jadi misalnya metode umum untuk memproses file, bekerja dengan komponen GUI dll tersedia di perpustakaan sehingga beberapa aplikasi dapat menggunakan fungsionalitas yang sama. Ini tidak hanya mengurangi kebutuhan untuk membangun hal yang sama berkali-kali, tetapi juga memastikan bahwa, misalnya, dialog umum adalah sama antar aplikasi.

Pustaka dapat dimuat pada waktu proses dan dengan demikian dibagikan di antara aplikasi bersamaan yang berbeda. Ini disebut penautan dinamis.

Dalam beberapa kasus, pustaka dapat dimasukkan ke dalam aplikasi itu sendiri. Ini dikenal sebagai tautan statis. Penautan statis membuat penerapan lebih mudah dengan biaya fleksibilitas karena aplikasi yang berbeda masing-masing akan memuat salinan DLL yang sama.

Namun, tautan statis tidak selalu menjadi pilihan. Misalnya, Anda tidak dapat menautkan aplikasi .NET secara statis. Pengguna harus memiliki pustaka .NET untuk menjalankan aplikasi .NET dan pustaka (atau rakitan seperti yang disebut dalam .NET) dimuat saat runtime.

DLL dibuat dengan alat yang sama yang digunakan untuk membuat aplikasi. Detail spesifiknya sangat bergantung pada alat yang digunakan.

Brian Rasmussen
sumber
Terima kasih atas jawabannya, satu hal yang saya ingin tahu adalah bagaimana aplikasi mengetahui fungsi apa yang tersedia di dll? Dll itu sendiri adalah semua kode mesin kan? Jadi bagaimana tanda tangan fungsi publik di dll terekspos?
Daniel
Saya tidak tahu tentang sebagian besar bahasa, tetapi pelengkapan otomatis Visual Studio akan menampilkan semua fungsi yang tersedia.
Berikan
1
Tapi bagaimana autocomplete mengetahui fungsi yang tersedia jika dll hanya kode mesin?
Daniel
2
Mesin dapat membaca kode mesin. DLL dapat berisi ikon, string, font. Mungkin ada daftar apa yang dikandungnya di suatu tempat di sana.
Grant
1
Visual C ++ berisi alat yang disebut dumpbin - menjalankan "dumpbin / ekspor apapun.dll" akan memberitahu Anda fungsi dan barang apa yang diekspor (yaitu tersedia untuk digunakan oleh program yang memuat DLL).
Graeme Perrow
29

DLL = Pustaka Tautan Dinamis

Nama tersebut sebenarnya cukup deskriptif tentang apa yang mereka capai.

Perpustakaan

Memungkinkan Anda mengisolasi kode untuk domain masalah tertentu ke dalam satu lokasi. Kemudian bagikan ini di antara beberapa aplikasi. Pustaka dapat ditukar dengan yang lain kapan saja untuk memperbaiki bug atau menambah fungsionalitas.

Tautan

Anda dapat "Menghubungkan" perpustakaan ke aplikasi sehingga logika di perpustakaan tidak dikompilasi langsung ke dalam aplikasi.

Dinamis

Perpustakaan dapat dimuat sesuai permintaan. Alih-alih memuat EXE tunggal yang sangat besar ke dalam memori, OS hanya dapat memuat bagian yang diperlukan. Selain itu, jika DLL dibagikan antar aplikasi, OS dapat mengoptimalkan cara pustaka dimuat dan membagikannya antar aplikasi.

Paul Alexander
sumber
10

File DLL (dynamic link library) dapat digambarkan sebagai "sub-program" kecil yang dimaksudkan untuk membantu program yang lebih besar berjalan dengan baik. Mereka menyediakan sarana untuk menghubungkan berbagai sumber daya perangkat keras dan perangkat lunak (pada berbagai titik dalam sesi run-time-nya) ke program yang dapat dieksekusi utama di mana mereka didasarkan, atas dasar "sesuai kebutuhan". Ini menghilangkan kebutuhan untuk memuat semua yang harus dilakukan dengan program yang dapat dieksekusi utama ke RAM komputer (memori akses acak) saat program pertama kali dijalankan.

Sumber daya perangkat lunak yang dibawa oleh DLL termasuk kode untuk berbagai fungsi program yang sebenarnya tidak diperlukan untuk menjaga program tetap berjalan: yaitu, fungsi yang hanya perlu dipanggil pada waktu tertentu selama sesi komputasi tertentu dan mungkin sebenarnya tidak diperlukan. untuk dipanggil sama sekali. Memuat fungsi-fungsi tersebut (dan mungkin ada cukup banyak fungsi tersebut untuk program tertentu) ke RAM komputer saat program pertama kali dijalankan dan kemudian menyimpannya di sana selama sesi akan membuang-buang ruang RAM - yang dianggap premium.

Kemajuan besar:

Perkembangan DLL merupakan kemajuan besar dalam komputasi, karena sebelum tersedia, segala sesuatu yang berkaitan dengan program (termasuk fungsi yang jarang digunakan) harus dimuat ke RAM saat program pertama kali dimuat. Itu menyebabkan komputasi yang sangat tidak efisien, dengan kecepatan lebih lambat yang ditunjukkan oleh berbagai program. Juga sangat sulit untuk melakukan banyak tugas dengan menjalankan bahkan beberapa program sederhana, karena beban yang menyertai pada RAM.

Pertimbangan:

DLL biasanya khusus untuk versi tertentu. Mereka yang bekerja dengan baik, katakanlah, Versi 1 dari sebuah program (atau bahasa pemrograman, seperti yang mungkin terjadi) mungkin tidak bekerja dengan baik dengan Versi 2. Aturan umumnya adalah bahwa DLL dalam versi yang lebih lama cenderung tidak dapat bekerja baik dengan versi yang lebih baru, tetapi versi yang lebih baru umumnya dapat bekerja cukup baik dengan versi program atau bahasa pemrograman yang lebih lama.

judy smith
sumber
7

Perpustakaan yang Terhubung Secara Dinamis.

Sebagai contoh, Jika Anda memiliki DLL orang lain yang dimuat ke aplikasi Anda, Anda dapat menggunakan bit pemrograman darinya.

Anda dapat memuat DLL yang menghasilkan angka acak yang selalu dimulai dengan "5" atau sesuatu.

Dalam program Anda, Anda dapat memanggil CrazyDLL.GenerateRandomNumbersSorta () dan itu akan mengembalikan nomor tersebut.

Untuk contoh dunia nyata, saya memiliki DLL yang menggabungkan 4 kotak teks (Anda akan menggunakan ini untuk mengetik alamat IP) dan secara otomatis hanya menerima angka kurang dari 256, dan menangani menekan tombol spasi mundur untuk melompat ke kotak teks sebelumnya.

Saya telah membuat DLL dengan kode itu, dan sekarang yang harus saya lakukan adalah menarik dan melepas lebih banyak koleksi kotak teks alamat IP tersebut tanpa harus menduplikasi semua kode itu berulang kali.

DLL yang sama juga berfungsi untuk mengubah alamat IP menjadi string heksadesimal, dan kode berguna lainnya.

Hibah
sumber
1

Dari Perpustakaan MSDN :

Pustaka tautan dinamis (DLL) adalah modul yang berisi fungsi dan data yang dapat digunakan oleh modul lain (aplikasi atau DLL).

Nemanja Trifunovic
sumber
1

DLL = Perpustakaan Tautan Beban Dinamis . Seperti yang telah Anda ketahui, ini pada dasarnya adalah kumpulan fungsi, kelas C ++, dan / atau variabel global. Anda dapat memuat DLL secara statis (misalnya, OS memuatnya secara otomatis saat program Anda mulai) atau secara dinamis (program Anda secara eksplisit memuatnya), di mana fungsi dan hal-hal di dalam DLL tersedia untuk program Anda.

Membuatnya mirip dengan membuat EXE, kecuali tidak perlu ada main()fungsi. Ada arahan linker untuk memberi tahu linker untuk membuat DLL, bukan EXE.

Alasan utama Anda ingin melakukan ini adalah untuk merangkum beberapa kode di satu tempat dan menggunakannya dari beberapa exe, daripada menautkan kode ke masing-masing.

Alasan yang agak historis adalah bahwa exe Anda bisa lebih kecil karena beberapa kode secara fisik terletak di file yang berbeda. Ini berarti jumlah ruang yang digunakan dalam memori oleh exe Anda bisa lebih kecil. Pada sistem modern, masalah ini sudah berkurang dibandingkan sebelumnya, meskipun mungkin masih menjadi masalah di Windows Mobile.

Graeme Perrow
sumber