DLL ADALAH:
sebuah program yang berisi kode dan data yang dapat digunakan lebih dari satu program pada saat yang sama.
Sebagai contoh, dalam sistem operasi Windows, Comdlg32 DLL melakukan umum kotak dialog berhubungan fungsi. Oleh karena itu, setiap program dapat menggunakan fungsi yang terdapat dalam ini DLL untuk menerapkan kotak dialog yang terbuka . Ini membantu mempromosikan kembali kode dan penggunaan efisien memori.
Dengan menggunakan DLL, sebuah program dapat modularized ke dalam komponen-komponen yang terpisah. Sebagai contoh, program akuntansi dapat dijual oleh modul. Setiap modul dapat dimuat ke program utama saat menjalankan jika modul diinstal. Karena modul-modul terpisah, waktu buka program lebih cepat, dan sebuah modul hanya dimuat ketika fungsi yang diminta.
Selain itu, update lebih mudah untuk diterapkan ke setiap modul tanpa mempengaruhi bagian-bagian lain dari program.Sebagai contoh, Anda mungkin memiliki program penggajian, dan tarif pajak berubah setiap tahun. Ketika perubahan ini terisolasi untuk DLL, Anda dapat menerapkan pembaruan tanpa perlu membangun atau menginstal program seluruh lagi.
Daftar berikut ini menjelaskan beberapa file yang dilaksanakan sebagai dll dalam sistem operasi Windows:
- Kontrol ActiveX (.ocx) file
Contoh kontrol ActiveX adalah kalender kontrol yang memungkinkan Anda memilih tanggal dari kalender. - Kontrol Panel (.cpl) file
Contoh file .cpl adalah item yang terletak di Panel kontrol. Setiap item adalah DLL khusus. - Perangkat berkas pengandar (.drv)
Contoh dari pengandar perangkat adalah pengandar printer yang mengendalikan mencetak ke printer.
Keuntungan DLL
Daftar berikut ini menjelaskan beberapa keuntungan yang disediakan ketika sebuah program menggunakan DLL:- Menggunakan lebih sedikit sumber daya
Ketika beberapa program menggunakan perpustakaan sama fungsi, DLL dapat mengurangi duplikasi kode yang dimuat pada disk dan memori fisik. Ini dapat sangat mempengaruhi kinerja tidak hanya program yang berjalan di latar depan, tapi juga program lain yang berjalan pada sistem operasi Windows. - Mempromosikan arsitektur modular
DLL membantu mempromosikan pengembangan modular program. Ini akan membantu Anda mengembangkan program besar yang memerlukan beberapa versi bahasa atau program yang menghendaki arsitektur modular.Contoh modular program adalah sebuah program akuntansi yang memiliki banyak modul yang dapat dimuat secara dinamis pada jangka waktu. - Memudahkan penyebaran dan instalasi
Ketika fungsi dalam DLL kebutuhan pembaruan atau perbaikan, penyebaran dan instalasi DLL tidak memerlukan program untuk relinked dengan DLL. Selain itu, jika beberapa program menggunakan sama DLL, beberapa program akan semua manfaat dari pembaruan atau perbaikan. Masalah ini dapat lebih sering terjadi ketika Anda menggunakan pihak ketiga DLL yang secara teratur diperbarui atau tetap.
Dependensi DLL
Ketika sebuah program atau DLL menggunakan fungsi DLL DLL lain, ketergantungan dibuat. Oleh karena itu, program ini tidak lagi mandiri, dan program mungkin mengalami masalah jika ketergantungan rusak. Sebagai contoh, program tidak dapat dijalankan jika salah satu dari tindakan berikut terjadi:- DLL tergantung di-upgrade ke versi baru.
- DLL tergantung tetap.
- DLL tergantung ditimpa dengan versi sebelumnya.
- Tergantung DLL akan dihapus dari komputer.
Daftar berikut ini menjelaskan perubahan yang telah diperkenalkan di Microsoft Windows 2000 dan kemudian sistem operasi Windows untuk membantu meminimalkan ketergantungan masalah:
- Perlindungan Berkas Windows
Dalam perlindungan berkas Windows, sistem operasi mencegah sistem dll dari yang diperbarui atau dihapus oleh agen tidak sah. Oleh karena itu, ketika penginstalan program mencoba untuk menghapus atau memperbarui DLL yang didefinisikan sebagai sebuah sistem DLL, perlindungan berkas Windows akan mencari tanda tangan digital yang berlaku. - Pribadi dll
Swasta dll membiarkan Anda mengisolasi sebuah program dari perubahan yang dibuat untuk bersama dll. swasta dll menggunakan informasi versi tertentu atau berkas .local kosong untuk menegakkan versi DLL yang digunakan oleh program. Untuk menggunakan pribadi dll, Cari Anda dll di map akar program. Kemudian, untuk program-program baru, menambah informasi versi tertentu DLL. Untuk program-program lama, menggunakan berkas .local kosong.Masing-masing metode mengatakan sistem operasi menggunakan dll swasta yang terletak di map akar program.
Alat-alat pemecahan masalah DLL
Beberapa alat tersedia untuk membantu Anda memecahkan masalah DLL. Alat berikut adalah beberapa alat-alat ini.Ketergantungan Walker
Alat ketergantungan Walker dapat secara rekursif memindai semua tergantung dll yang digunakan oleh program. Ketika Anda membuka program dalam ketergantungan Walker, ketergantungan Walker melakukan cek berikut:- Ketergantungan Walker cek untuk hilang dll.
- Ketergantungan Walker memeriksa file program atau dll yang tidak sah.
- Ketergantungan Walker memeriksa bahwa fungsi impor dan ekspor fungsi pertandingan.
- Ketergantungan Walker pemeriksaan kesalahan melingkar ketergantungan.
- Ketergantungan Walker cek untuk modul yang tidak valid karena modul untuk sistem operasi yang berbeda.
drive\Program Files\Microsoft Visual Studio\Common\Tools
Pemecah masalah Universal DLL
Alat pemecah masalah Universal (DUPS) DLL yang digunakan untuk melakukan audit, membandingkan, dokumen, dan menampilkan informasi DLL. Daftar berikut ini menjelaskan utilitas yang membuat alat DUPS:- Dlister.exe
Utilitas ini enumerates semua dll pada komputer dan log informasi ke file teks atau untuk sebuah file database. - Dcomp.exe
Utilitas ini membandingkan dll yang tercantum dalam dua teks file dan menghasilkan file teks ketiga yang berisi perbedaan. - Dtxt2DB.exe
Utilitas ini memuat berkas teks yang dibuat dengan menggunakan utilitas Dlister.exe dan utilitas Dcomp.exe ke dllHell database. - DlgDtxt2DB.exe
Utilitas ini menyediakan pengguna grafis antarmuka (GUI) versi utilitas Dtxt2DB.exe.
247957 Menggunakan DUPS.exe untuk mengatasi masalah kompatibilitas DLL
Database DLL membantu
Database DLL membantu membantu Anda menemukan versi tertentu dll yang diinstal oleh produk perangkat lunak Microsoft.Untuk informasi lebih lanjut tentang database DLL membantu, kunjungi Web site Microsoft berikut:Pengembangan DLL
Bagian ini menjelaskan masalah-masalah dan persyaratan yang harus Anda pertimbangkan ketika Anda mengembangkan dll Anda sendiri.Jenis dll
Ketika Anda memuat DLL dalam aplikasi, dua metode menghubungkan memberitahu Anda memanggil fungsi DLL diekspor.Dua metode menghubungkan adalah waktu buka dinamis menghubungkan dan run-time dinamis menghubungkan.Waktu buka dinamis menghubungkan
Dalam waktu buka dinamis, aplikasi membuat eksplisit panggilan untuk diekspor DLL fungsi seperti lokal fungsi. Untuk menggunakan waktu buka dinamis menghubungkan, menyediakan file header (.h) dan impor file library (.lib) ketika Anda mengkompilasi dan link aplikasi. Ketika Anda melakukan ini, linker akan menyediakan sistem dengan informasi yang diperlukan untuk memuat DLL dan menyelesaikan diekspor DLL fungsi lokasi pada waktu buka.Daftar berikut ini menjelaskan aplikasi kriteria untuk ketika menggunakan waktu buka dinamis menghubungkan dan ketika menggunakan run-time menghubungkan dinamis:
- Startup kinerja
Apakah startup awal kinerja aplikasi penting, Anda harus menggunakan run-time dinamis menghubungkan. - Kemudahan penggunaan
Dalam waktu buka dinamis menghubungkan, DLL diekspor fungsi yang seperti lokal fungsi. Hal ini membuat mudah bagi Anda untuk panggilan ini fungsi. - Logika aplikasi
Dalam dinamis run-time, menghubungkan, aplikasi dapat cabang untuk memuat modul yang berbeda seperti yang diperlukan. Hal ini penting ketika Anda mengembangkan Versi multi-bahasa.
Run-time dinamis menghubungkan
Daftar berikut ini menjelaskan aplikasi kriteria untuk ketika untuk penggunaan waktu buka dinamis menghubungkan dan ketika menggunakan run-time dinamis menghubungkan:
BOOL APIENTRY DllMain(
HANDLE hModule, // Handle to DLL module
DWORD ul_reason_for_call, // Reason for calling function
LPVOID lpReserved ) // Reserved
{
switch ( ul_reason_for_call )
{
case DLL_PROCESS_ATTACHED:
// A process is loading the DLL.
break;
case DLL_THREAD_ATTACHED:
// A process is creating a new thread.
break;
case DLL_THREAD_DETACH:
// A thread exits normally.
break;
case DLL_PROCESS_DETACH:
// A process unloads the DLL.
break;
}
return TRUE;
}
Titik entri fungsi harus hanya melakukan sederhana inisialisasi tugas dan tidak boleh menyebut DLL loading atau penghentian fungsi. Sebagai contoh, dalam catatan titik fungsi, Anda harus tidak langsung atau secara tidak langsung panggilanLoadLibrary fungsi atau LoadLibraryEx fungsi. Selain itu, Anda tidak boleh menyebut FreeLibrary fungsi ketika proses mengakhiri.
Catatan Dalam multithreaded aplikasi, pastikan bahwa akses untuk DLL global data disinkronisasi (benang aman) untuk menghindari galat data mungkin. Pada melakukan hal ini, menggunakan TLS untuk menyediakan data unik untuk setiap thread.
Titik entri DLL
Untuk mengekspor DLL fungsi, Anda juga dapat menambahkan kata kunci fungsi untuk DLL diekspor fungsi atau membuat file definisi (.def) modul yang berisi daftar fungsi DLL diekspor.Untuk mengekspor DLL fungsi, Anda dapat menambahkan kata kunci fungsi untuk fungsi DLL diekspor atau membuat file definisi (.def) modul yang berisi daftar fungsi DLL diekspor.
__declspec(dllexport)
Menggunakan fungsi DLL diekspor dalam aplikasi, Anda harus menyatakan masing-masing fungsi yang ingin Anda impor dengan kunci berikut:
__declspec(dllimport)
Biasanya, Anda akan menggunakan satu file header yang telah menentukan pernyataan dan ifdef pernyataan untuk memisahkan pernyataan ekspor dan impor pernyataan.Anda juga dapat menggunakan file definisi modul untuk menyatakan diekspor DLL fungsi. Ketika Anda menggunakan file definisi modul, Anda tidak memiliki untuk menambahkan kata kunci fungsi untuk fungsi DLL diekspor. Dalam modul file definisi, Anda menyatakan PERPUSTAKAAN pernyataan dan EKSPOR pernyataan untuk DLL. Kode berikut adalah contoh file definisi.
// SampleDLL.def
//
LIBRARY "sampleDLL"
EXPORTS
HelloWorld
Contoh DLL dan aplikasi
Di Microsoft Visual C++ 6.0, Anda dapat membuat DLL dengan memilih baik Win32 Dynamic-Link Perpustakaan proyek jenis atau MFC AppWizard (dll) jenis proyek.Kode berikut ini adalah contoh dari DLL yang dibuat dalam Visual C++ dengan menggunakan Win32 Dynamic-Link Perpustakaan jenis proyek.
// SampleDLL.cpp
//
#include "stdafx.h"
#define EXPORTING_DLL
#include "sampleDLL.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
return TRUE;
}
void HelloWorld()
{
MessageBox( NULL, TEXT("Hello World"), TEXT("In a DLL"), MB_OK);
}
// File: SampleDLL.h
//
#ifndef INDLL_H
#define INDLL_H
#ifdef EXPORTING_DLL
extern __declspec(dllexport) void HelloWorld() ;
#else
extern __declspec(dllimport) void HelloWorld() ;
#endif
#endif
// SampleApp.cpp
//
#include "stdafx.h"
#include "sampleDLL.h"
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HelloWorld();
return 0;
}
Dalam dinamis run-time, menghubungkan, Anda menggunakan kode yang sama dengan kode berikut untuk memanggil SampleDLL.dll diekspor DLL fungsi.
...
typedef VOID (*DLLPROC) (LPTSTR);
...
HINSTANCE hinstDLL;
DLLPROC HelloWorld;
BOOL fFreeDLL;
hinstDLL = LoadLibrary("sampleDLL.dll");
if (hinstDLL != NULL)
{
HelloWorld = (DLLPROC) GetProcAddress(hinstDLL, "HelloWorld");
if (HelloWorld != NULL)
(HelloWorld);
fFreeDLL = FreeLibrary(hinstDLL);
}
...
- Folder aplikasi
- Folder saat ini
- Folder sistem Windows
Catatan The GetSystemDirectory fungsi kembali jalan sistem Windows folder. - Map Windows
Catatan The GetWindowsDirectory fungsi mengembalikan lintasan dari map Windows.
The.NET Framework Majelis
Dengan pengenalan Microsoft.NET dan.NET Framework, sebagian besar masalah yang berhubungan dengan dll telah dieliminasi oleh menggunakan Majelis. Perakitan adalah unit logis fungsionalitas yang berjalan di bawah kendali.NET common language runtime (CLR). Majelis secara fisik ada sebagai berkas .dll atau sebagai berkas .exe. Namun, secara internal Majelis ini sangat berbeda dari Microsoft Win32 DLL.Majelis file berisi Majelis nyata, jenis metadata, Microsoft menengah kode bahasa (menjalankan), dan sumber daya lainnya. Majelis nyata berisi Majelis metadata yang memberikan semua informasi yang diperlukan untuk Majelis harus self-describing. Informasi berikut disertakan dalam Majelis nyata:
- Nama Majelis
- Informasi versi
- Budaya informasi
- Nama kuat informasi
- Daftar perakitan file
- Jenis referensi informasi
- Informasi direferensikan dan tergantung Majelis
Daftar berikut ini menjelaskan beberapa fitur Majelis dibandingkan dengan fitur dll Win32:
- Self-describing
Bila Anda membuat perakitan, semua informasi yang adalah diperlukan untuk CLR menjalankan Majelis terkandung dalam Majelis nyata. Majelis nyata berisi daftar Majelis tergantung. Oleh karena itu, CLR dapat mempertahankan seperangkat konsisten Majelis yang digunakan dalam aplikasi. Dalam Win32 dll, Anda tidak bisa menjaga konsistensi antara satu set Dll yang digunakan dalam aplikasi ketika Anda menggunakan bersama dll. - Versi
Pada Majelis nyata, merekam informasi versi dan ditegakkan oleh CLR. Selain itu, versi kebijakan memungkinkan Anda menegakkan Versi khusus penggunaan. Dalam dll Win32, versi tidak bisa ditegakkan oleh sistem operasi. Sebaliknya, Anda harus memastikan bahwa dll mundur kompatibel. - Sisi-by-side penyebaran
Majelis mendukung penyebaran sisi-by-side. Satu aplikasi dapat menggunakan salah satu versi dari Majelis, dan aplikasi lain dapat menggunakan yang berbeda Versi perakitan. Dimulai pada Windows 2000, adalah sisi-by-side penyebaran didukung oleh mencari dll dalam folder aplikasi. Selain itu, Windows Perlindungan berkas mencegah sistem dll yang ditimpa atau digantikan oleh agen yang tidak sah. - Self-Containment dan isolasi
Sebuah aplikasi yang dikembangkan dengan menggunakan Majelis dapat Self-contained dan terisolasi dari aplikasi lain yang berjalan pada komputer. Fitur ini membantu Anda membuat nol-dampak instalasi. - Eksekusi
Majelis berjalan di bawah izin keamanan yang disediakan di Majelis nyata dan yang dikendalikan oleh CLR. - Bahasa independen
Majelis dapat dikembangkan dengan menggunakan salah satu dari didukung.Bahasa yang bersih. Sebagai contoh, Anda dapat mengembangkan sebuah Majelis di Microsoft Visual C#, dan kemudian menggunakan Majelis di Microsoft Visual Basic.NET proyek.
0 komentar:
Post a Comment