Saya ingin tahu perbedaan yang tepat antara file dll dan exe.
Saya ingin tahu perbedaan yang tepat antara file dll dan exe.
Jawaban:
EXE:
DLL:
Untuk Detail Lebih Lanjut: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL
Referensi: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
LibMain
fungsi.
Saya tidak tahu mengapa semua orang menjawab pertanyaan ini dalam konteks .NET. Pertanyaannya bersifat umum dan tidak menyebutkan .NET di mana pun.
Nah, perbedaan utamanya adalah:
EXE
DLL
Format file DLL dan exe pada dasarnya sama. Windows mengenali perbedaan antara DLL dan EXE melalui PE Header di file. Untuk detail Header PE, Anda dapat melihat Artikel ini di MSDN
Perbedaannya adalah bahwa EXE memiliki titik masuk, metode "utama" yang akan dijalankan saat eksekusi.
Kode dalam DLL perlu dipanggil dari aplikasi lain.
Ada beberapa perbedaan lagi mengenai struktur yang dapat Anda sebutkan.
Characteristics
anggota IMAGE_FILE_HEADER
inside IMAGE_NT_HEADERS
. Untuk DLL, IMAGE_FILE_DLL
flag (0x2000) telah diaktifkan. Untuk EXE, ini adalah IMAGE_FILE_EXECUTABLE_IMAGE
bendera (0x2).IMAGE_OPTIONAL_HEADER
) adalah ImageBase
anggota. Ini menentukan alamat virtual di mana PE mengasumsikan akan dimuat. Jika dimuat di alamat lain, beberapa petunjuk mungkin mengarah ke memori yang salah. Karena file EXE adalah yang pertama dimuat ke dalam ruang alamat baru mereka, pemuat Windows dapat memastikan alamat pemuatan yang konstan dan biasanya itu 0x00400000. Kemewahan itu tidak ada untuk DLL. Dua file DLL yang dimuat ke dalam proses yang sama dapat meminta alamat yang sama. Inilah sebabnya mengapa DLL memiliki direktori data lain yang disebut Direktori Relokasi Pangkalan yang biasanya berada di bagiannya sendiri - .reloc
. Direktori ini berisi daftar tempat di DLL yang perlu di-rebased / ditambal agar mengarah ke memori yang benar. Sebagian besar file EXE tidak memiliki direktori ini, tetapi beberapa kompiler lama memang menghasilkannya.Anda dapat membaca lebih lanjut tentang topik ini @ MSDN .
Jawaban ini sedikit lebih rinci dari yang saya kira, tetapi saya membacanya.
DLL:
Dalam banyak kasus, file DLL adalah pustaka . Ada beberapa jenis pustaka, dinamis dan statis - baca tentang perbedaannya . DLL adalah singkatan dari pustaka tautan dinamis yang memberi tahu kita bahwa itu adalah bagian dari program tetapi tidak semuanya. Itu terbuat dari komponen perangkat lunak yang dapat digunakan kembali ( perpustakaan ) yang dapat Anda gunakan untuk lebih dari satu program . Ingatlah bahwa selalu mungkin untuk menggunakan kode sumber perpustakaan dalam banyak aplikasi menggunakan salin-tempel, tetapi gagasan dari Perpustakaan DLL / Statis adalah Anda dapat memperbarui kode perpustakaan dan pada saat yang sama memperbarui semua aplikasi yang menggunakan itu - tanpa kompilasi.
Misalnya:
Bayangkan Anda sedang membuat komponen GUI Windows seperti Tombol . Dalam kebanyakan kasus, Anda ingin menggunakan kembali kode yang telah Anda tulis karena ini adalah komponen yang kompleks tetapi umum - Anda ingin banyak aplikasi menggunakannya tetapi Anda tidak ingin memberi mereka kode sumber Anda tidak dapat menyalin -paste kode untuk tombol di setiap program, jadi Anda memutuskan ingin membuat DL-Library (DLL) .
Ini "tombol" perpustakaan diperlukan oleh EXE cutables untuk menjalankan, dan tanpa itu mereka tidak akan berjalan karena mereka tidak tahu cara membuat tombol, hanya bagaimana berbicara dengan itu.
Demikian pula, DLL tidak dapat dijalankan - jalankan, karena ini hanya bagian dari program tetapi tidak memiliki informasi yang diperlukan untuk membuat "proses" .
EXE:
Yang dapat dieksekusi adalah program . Ia tahu bagaimana membuat proses dan bagaimana berbicara dengan DLL. Ini perlu DLL untuk membuat sebuah tombol, dan tanpa itu aplikasi tidak berjalan - ERROR.
semoga ini membantu....
using SomeClassFromALibrary
, pustaka itu ditautkan ke proyek melalui DLL? Hanya mencoba untuk melihat apakah saya memahaminya dengan benar
using
untuk ruang nama, bukan kelas. Pengecualian using static
tersedia dari c # 6 yang mengimpor semua anggota statis yang ada di kelas yang ditentukan ( tautan ). Kata using
kunci memberikan janji kepada kompilator bahwa pada waktu proses akan ada pustaka yang berisi namespace tersebut . Pustaka tidak ditautkan ke proyek melalui DLL itu, DLL adalah pustaka yang ditautkan ke proyek (perakitan). DLL itu berisi semua kode yang dijanjikan dalam waktu kompilasi.
DLL dan EXE adalah Format Portable Executable (PE)
Sebuah perpustakaan dinamis-link (DLL) adalah perpustakaan dan karena itu tidak dapat dieksekusi secara langsung. Jika Anda mencoba menjalankannya, Anda akan mendapatkan kesalahan tentang titik masuk yang hilang. Diperlukan titik masuk (fungsi utama) agar dapat dieksekusi, titik masuk tersebut dapat berupa aplikasi atau exe apa pun. Pengikatan DLL terjadi pada saat run-time. Itulah mengapa disebut pustaka "Tautan Dinamis".
An Executable (EXE) adalah program yang bisa dijalankan. Ia memiliki titik masuknya sendiri. Bendera di dalam header PE menunjukkan jenis file itu (tidak relevan dengan ekstensi file). Header PE memiliki bidang tempat titik masuk untuk program berada. Dalam DLL itu tidak digunakan (atau setidaknya bukan sebagai titik masuk).
Ada banyak perangkat lunak yang tersedia untuk memeriksa informasi header. Satu-satunya perbedaan yang menyebabkan keduanya bekerja secara berbeda adalah bit di header seperti yang ditunjukkan pada diagram di bawah ini.
File EXE hanya memiliki satu entri utama artinya itu adalah aplikasi yang terisolasi, ketika sistem meluncurkan exe, proses baru dibuat sementara DLL memiliki banyak titik masuk sehingga ketika aplikasi menggunakannya tidak ada proses baru yang dimulai, DLL dapat digunakan kembali dan diversi. DLL mengurangi ruang penyimpanan karena program yang berbeda dapat menggunakan dll yang sama.
.exe
atau .dll
tidak? Bendera di tajuk itulah yang benar-benar membedakannya .... Jadi jika saya membuat exe
dan menamainya melalui interaksi GUI sebagai .dll
, tetapi kemudian mengubah tanda itu secara manual, itu masih dapat dijalankan?
Dll v / s Exe
1) File DLL adalah pustaka tautan dinamis yang dapat digunakan dalam file exe dan file dll lainnya.
File EXE adalah file yang dapat dieksekusi yang berjalan dalam proses terpisah yang dikelola oleh OS.
2) DLL tidak dapat dieksekusi secara langsung. Mereka adalah file terpisah yang berisi fungsi yang dapat dipanggil oleh program dan DLL lain untuk melakukan komputasi dan fungsi.
EXE adalah program yang dapat dijalankan. Contoh: Program Windows
3) Dapat Digunakan Kembali
DLL: Mereka dapat digunakan kembali untuk beberapa aplikasi lain. Selama pembuat kode mengetahui nama dan parameter dari fungsi dan prosedur dalam file DLL.
EXE: Hanya untuk tujuan tertentu.
4) DLL akan berbagi proses dan ruang memori yang sama dari aplikasi pemanggil sementara
EXE membuat proses dan ruang memori yang terpisah.
5) Menggunakan
DLL: Anda ingin banyak aplikasi menggunakannya tetapi Anda tidak ingin memberi mereka kode sumber Anda tidak dapat menyalin-tempel kode untuk tombol di setiap program, jadi Anda memutuskan ingin membuat DL- Perpustakaan (DLL).
EXE: Ketika kami bekerja dengan templat proyek seperti Aplikasi Formulir Windows, Aplikasi Konsol, Aplikasi WPF, dan Layanan Windows, mereka menghasilkan rakitan exe saat dikompilasi.
6) Kesamaan:
DLL dan EXE adalah file biner yang memiliki struktur bersarang kompleks yang ditentukan oleh format Portable Executable, dan tidak dimaksudkan untuk dapat diedit oleh pengguna.
Dua hal: ekstensi dan bendera tajuk disimpan dalam file.
Kedua file tersebut adalah file PE. Keduanya berisi tata letak yang sama persis. DLL adalah pustaka dan oleh karena itu tidak dapat dijalankan. Jika Anda mencoba menjalankannya, Anda akan mendapatkan kesalahan tentang titik masuk yang hilang. EXE adalah program yang dapat dijalankan. Ini memiliki titik masuk. Bendera di dalam header PE menunjukkan jenis file itu (tidak relevan dengan ekstensi file). Header PE memiliki kolom tempat titik masuk untuk program berada. Dalam DLL itu tidak digunakan (atau setidaknya bukan sebagai titik masuk).
Satu perbedaan kecil adalah bahwa dalam banyak kasus DLL memiliki bagian ekspor tempat simbol diekspor. EXE tidak boleh memiliki bagian ekspor karena mereka bukan perpustakaan tetapi tidak ada yang mencegah hal itu terjadi. Loader Win32 tidak peduli.
Selain itu mereka identik. Jadi, singkatnya, EXE adalah program yang dapat dieksekusi sementara DLL adalah pustaka yang dimuat ke dalam proses dan berisi beberapa jenis fungsionalitas yang berguna seperti keamanan, akses database, atau sesuatu.
.Exe adalah programnya. .Dll adalah pustaka yang mungkin dipanggil oleh .exe (atau .dll lain).
Apa yang sakthivignesh katakan bisa jadi benar dalam satu .exe dapat menggunakan yang lain seolah-olah itu adalah perpustakaan, dan ini dilakukan (misalnya) dengan beberapa komponen COM. Dalam hal ini, "slave" .exe adalah program terpisah (sebenarnya, proses terpisah - mungkin berjalan pada mesin terpisah), tetapi program yang menerima dan menangani permintaan dari program / komponen / apa pun.
Namun, jika Anda hanya memilih .exe dan .dll acak dari folder di Program Files Anda, kemungkinan besar COM tidak relevan - mereka hanya program dan pustaka yang terhubung secara dinamis.
Menggunakan Win32 API, program dapat memuat dan menggunakan DLL menggunakan fungsi API LoadLibrary dan GetProcAddress, IIRC. Ada fungsi serupa di Win16.
COM dalam banyak hal merupakan evolusi dari ide DLL, yang awalnya dianggap sebagai dasar OLE2, sedangkan .NET adalah turunan dari COM. DLL telah ada sejak Windows 1, IIRC. Mereka awalnya adalah cara berbagi kode biner (terutama API sistem) antara beberapa program yang sedang berjalan untuk meminimalkan penggunaan memori.
EXE terlihat oleh sistem sebagai executable Win32 biasa. Titik masuknya mengacu pada loader kecil yang menginisialisasi runtime .NET dan memberitahunya untuk memuat dan menjalankan rakitan yang terdapat dalam EXE. Sebuah DLL terlihat oleh sistem sebagai DLL Win32 tetapi kemungkinan besar tanpa titik masuk apa pun. Runtime .NET menyimpan informasi tentang rakitan terkandung di header sendiri.
dll adalah kumpulan fungsi yang dapat digunakan kembali dimana sebagai .exe adalah dapat dieksekusi yang dapat memanggil fungsi-fungsi ini
Exe adalah program yang dapat dieksekusi sedangkan DLL adalah file yang dapat dimuat dan dijalankan oleh program secara dinamis.
● .exe dan dll adalah versi terkompilasi dari kode c # yang juga disebut sebagai rakitan.
● .exe adalah file eksekusi yang berdiri sendiri, yang berarti dapat dieksekusi secara langsung.
● .dll adalah komponen yang dapat digunakan kembali yang tidak dapat dijalankan secara langsung dan membutuhkan program lain untuk menjalankannya.
1) DLL adalah Komponen Dalam Proses yang berarti berjalan di ruang memori yang sama dengan proses klien. EXE adalah Out-Process Component yang berarti berjalan di ruang memori terpisahnya sendiri.
2) DLL berisi fungsi dan prosedur yang dapat digunakan oleh program lain (mempromosikan reuabilitas) sementara EXE tidak dapat dibagikan dengan program lain.
3) DLL tidak dapat langsung dijalankan karena dirancang untuk dimuat dan dijalankan oleh program lain. EXE adalah program yang dijalankan secara langsung.
Bagi mereka yang mencari jawaban ringkas,
Jika sebuah assembly dikompilasi sebagai pustaka kelas dan menyediakan tipe untuk rakitan lain untuk digunakan, maka itu memiliki ekstensi ifle .dll
(pustaka tautan dinamis), dan tidak dapat dijalankan secara mandiri.
Demikian juga, jika sebuah assembly dikompilasi sebagai aplikasi, maka ia memiliki ekstensi file .exe
(dapat dieksekusi) dan dapat dijalankan secara mandiri. Sebelum .NET Core 3.0, aplikasi konsol dikompilasi ke file .dll dan harus dijalankan oleh perintah jalankan dotnet atau host yang dapat dieksekusi. - Sumber
Perbedaan utama antara DLL dan EXE adalah bahwa DLL tidak memiliki titik masuk dan EXE. Jika Anda terbiasa dengan c ++, Anda dapat melihat bahwa build EXE memiliki fungsi entri main () dan DLL tidak :)