468x60 Ads

Apakah DLL itu?


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.
Tindakan ini umumnya dikenal sebagai konflik DLL. Jika kompatibilitas tidak dipaksakan, program mungkin tidak berhasil menjalankan.

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.
Dengan menggunakan ketergantungan Walker, Anda dapat dokumen semua dll yang menggunakan program. Ini dapat membantu mencegah dan memperbaiki masalah DLL yang mungkin terjadi di masa depan. Ketergantungan Walker terletak di direktori berikut ketika Anda menginstal Microsoft Visual Studio 6.0:
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.
Untuk informasi lebih lanjut tentang alat DUPS, klik nomor artikel berikut ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
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;
}
Ketika Anda membuat DLL, Anda dapat opsional menentukan fungsi titik entri. Titik entri fungsi disebut ketika proses atau benang melampirkan sendiri ke DLL atau terpisah sendiri dari DLL. Anda dapat menggunakan fungsi titik entri untuk menginisialisasi struktur data atau untuk menghancurkan struktur data seperti yang dipersyaratkan oleh DLL. Selain itu, jika aplikasi multithreaded, Anda dapat menggunakan benang penyimpanan lokal (TLS) untuk mengalokasikan memori yang pribadi untuk setiap thread di fungsi titik entri. Kode berikut adalah contoh dari fungsi titik entri DLL. 

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
Kode berikut adalah contoh Win32 Aplikasi proyek yang memanggil fungsi DLL diekspor di SampleDLL DLL.

// SampleApp.cpp 
//

#include "stdafx.h"
#include "sampleDLL.h"

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{ 	
	HelloWorld();
	return 0;
}
Catatan Dalam waktu buka dinamis, Anda harus link SampleDLL.lib Impor perpustakaan yang dibuat ketika Anda membangun SampleDLL proyek.

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);
}
...
Ketika Anda mengkompilasi dan link SampleDLL aplikasi, jendela sistem operasi mencari DLL SampleDLL di lokasi-lokasi berikut di urutan ini:
  1. Folder aplikasi
  2. Folder saat ini
  3. Folder sistem Windows

    Catatan The GetSystemDirectory fungsi kembali jalan sistem Windows folder.
  4. 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
Menjalankan kode yang terdapat dalam Majelis tidak dapat langsung dieksekusi. Sebaliknya, menjalankan kode eksekusi dikelola melalui CLR. Oleh default, bila Anda membuat perakitan, Majelis pribadi untuk aplikasi. Untuk membuat Majelis bersama memerlukan bahwa Anda menetapkan nama yang kuat Majelis dan kemudian menerbitkan Majelis di Majelis global cache.

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