A. Dinamic
Link Library
1.
Pengertian
Dinamic Link Library
Dynamic Link Library
(File Dll) adalah file yang mengandung kode-fungsi yang
dapat dipanggil dari kode-executable (.exe) atau bisa juga
di panggil dari file Dll yang lain. Paling simple kalo disebut file library
windows karena umumnya hanya ada pada Sistem Operasi Windows, File Dll
merupakan kode yang sudah dikompilasi dan dapat digunakan oleh program lain bias
juga di gunakan oleh beberapa program. Jika kita meletakan fungsi ke
dalam dll, berarti fungsi tersebut dapat diakses oleh semua program pada saat
yang bersamaan. File Dll biasanya ditulis dengan bahasa C/C++, Delphi
atau bahasa lainnya yang mendukung Sistem Operasi Windows.
2.
Kegunaan
Dinamic Link Library
Eksistensi dari File
Dll paling utama ditujukan buat menyederhanakan suatu program. Karena
progam tersebut tidak perlu mempunyai kode progam untuk fungsi umumnya, tinggal
memanggil fungsi yang ada pada File Dll tersebut. Sebagai contoh sebelum kita
membuat sebuah program perkalian, kita membuat terlebih dahulu source-code
Fungsi perkalian di dalam file Dll, kemudian kita buat source-code aplikasi dan
dimana source-code aplikasi tersebut kita tinggal memanggil fungsi perkalian
yang sudah kita masukan di dalam File Dll Tersebut.
Jadi dengan kata lain
nama Dynamic Link Library bisa diartikan penyederhana program karena
source-code program induk ada di dalam File Dll tersebut. Jika Di Dalam Windows
dia adalah perpustakaan yang punya banyak list fungsi dan bisa dimanfaatkan
program yang ada di windows. Mereka disebut link dinamis (dynamic
link) karena mereka dimanfaatkan hanya ketika sebuah program memanggil mereka,
dan merekapun juga berjalan di ruang memori (memory area) tersendiri. Lebih
dari satu program dapat menggunakan fungsi DLL, bahkan pada waktu yang
sama. Sehingga struktur program aplikasi menjadi lebih sederhana, ringan
dan tidak banyak memakan ruang space.
3.
Fitur
Dinamic Link Library
a. Management
Memory
Pada
Windows API , file DLL akan disusun menjadi beberapa bagian . Setiap bagian
telah menetapkan sendiri atribut , seperti menjadi dapat ditulisi atau
read-only , executable ( kode ) atau non - executable ( untuk data ) , dan
sebagainya .
Kode dalam DLL biasanya dibagi di antara semua proses
yang menggunakan DLL , yaitu, mereka menempati satu tempat di memori fisik ,
dan tidak mengambil ruang dalam file halaman . Jika memori fisik yang ditempati
oleh bagian kode yang akan direklamasi , isinya dibuang , dan kemudian ulang
langsung dari file DLL yang diperlukan .
Berbeda dengan bagian kode , bagian data DLL biasanya
swasta, yaitu , setiap proses menggunakan DLL memiliki salinan dari semua data
DLL . Opsional , bagian data dapat dibuat bersama, yang memungkinkan
antar-proses komunikasi melalui daerah ini memori bersama . Namun, karena
pembatasan pengguna tidak berlaku untuk penggunaan memori bersama DLL , ini
menciptakan lubang keamanan , yaitu satu proses dapat merusak data bersama ,
yang kemungkinan akan menyebabkan semua proses sharing lainnya untuk
berperilaku tidak diinginkan . Sebagai contoh, sebuah proses yang berjalan di
bawah account tamu dapat dengan cara ini korup proses lain berjalan di bawah
account istimewa . Ini adalah alasan penting untuk menghindari penggunaan
bagian bersama dalam DLL .
Jika DLL dikompresi oleh packers executable tertentu
(misalnya UPX ) , semua bagian kodenya ditandai sebagai membaca dan menulis ,
dan akan unshared . Bagian kode read - and- write , seperti bagian data pribadi
, pribadi untuk setiap proses . Dengan demikian DLL dengan bagian data bersama
tidak harus dikompresi jika mereka dimaksudkan untuk digunakan secara bersamaan
oleh beberapa program , karena setiap contoh program yang akan harus membawa
salinan sendiri dari DLL , sehingga peningkatan konsumsi memori .
b. Import
Library
Seperti perpustakaan statis, perpustakaan impor untuk DLL dicatat
oleh ekstensi file. Lib. Sebagai contoh, kernel32.dll, perpustakaan dinamis utama
untuk fungsi Windows 'dasar
seperti pembuatan berkas dan manajemen memori, yang
dihubungkan melalui kernel32.lib.
Menghubungkan ke perpustakaan dinamis
biasanya ditangani dengan menghubungkan
ke sebuah perpustakaan impor
ketika membangun atau menghubungkan untuk membuat file eksekusi. Executable yang dibuat kemudian
berisi tabel alamat impor (IAT) dimana
semua panggilan fungsi DLL yang direferensikan
(masing-masing fungsi DLL direferensikan berisi
entri sendiri dalam IAT). Pada saat run-time, IAT diisi dengan alamat
yang tepat yang mengarah langsung ke fungsi dalam DLL terpisah dimuat.
c. Resolusi simbol dan mengikat
Setiap
fungsi yang diekspor oleh DLL diidentifikasi oleh ordinal numerik dan opsional
nama. Demikian juga , fungsi dapat diimpor dari DLL baik oleh ordinal atau
dengan nama . Ordinal tersebut merupakan posisi fungsi alamat pointer pada
Address tabel DLL Ekspor . Adalah umum untuk fungsi internal yang akan diekspor
oleh ordinal saja. Bagi sebagian besar fungsi Windows API hanya nama-nama yang
diawetkan di rilis Windows yang berbeda , ordinals dapat berubah . Dengan
demikian, kita tidak dapat dipercaya mengimpor fungsi API Windows dengan
ordinals mereka .
Mengimpor fungsi dengan ordinal memberikan kinerja yang
hanya sedikit lebih baik daripada mengimpor mereka dengan nama : tabel ekspor
DLL yang diperintahkan oleh nama , sehingga pencarian biner dapat digunakan
untuk mencari fungsi. Indeks nama yang ditemukan kemudian digunakan untuk
mencari ordinal dalam tabel Ekspor Ordinal . Pada 16 - bit Windows , tabel nama
tidak diurutkan , sehingga overhead nama lookup jauh lebih terlihat .
Hal
ini juga memungkinkan untuk mengikat dapat dieksekusi untuk versi tertentu dari
sebuah DLL , yaitu , untuk menyelesaikan alamat fungsi yang diimpor pada saat
kompilasi . Untuk impor terikat , linker akan menyimpan timestamp dan checksum
dari DLL yang impor terikat . Pada saat run -time Windows memeriksa untuk
melihat apakah versi yang sama dari perpustakaan yang digunakan, dan jika
demikian , Windows bypasses memproses impor . Jika tidak , jika perpustakaan
ini berbeda dari satu yang pasti , Windows proses impor secara normal .
Bound executables beban agak lebih cepat jika mereka
berjalan di lingkungan yang sama bahwa mereka dikompilasi untuk , dan waktu
yang tepat sama jika mereka berjalan di lingkungan yang berbeda , sehingga
tidak ada kelemahan untuk mengikat impor . Sebagai contoh, semua aplikasi
standar Windows terikat pada DLL sistem rilis Windows masing-masing . Sebuah
kesempatan yang baik untuk mengikat impor aplikasi untuk lingkungan target
adalah saat instalasi aplikasi . Hal ini membuat perpustakaan ' terikat '
sampai update OS berikutnya . Memang, bagaimanapun , mengubah checksum dari
executable , jadi itu bukan sesuatu yang bisa dilakukan dengan program
ditandatangani , atau program yang dikelola oleh manajemen konfigurasi alat
yang menggunakan checksum ( seperti MD5 checksum ) untuk mengelola versi berkas
. Karena semakin Windows versi terbaru sudah pindah dari memiliki alamat tetap
untuk setiap perpustakaan dimuat ( untuk alasan keamanan ) , peluang dan nilai
mengikat eksekusi menurun .
4.
Compiler
Menggunakan Bahasa C/C++
Microsoft
Visual C ( MSVC ) menyediakan beberapa ekstensi untuk standar C+ + yang
memungkinkan fungsi yang harus ditetapkan sebagai diimpor atau diekspor
langsung dalam C++, kode ini telah diadopsi oleh Windows C lainnya dan C++ compiler , termasuk versi
Windows GCC . Ekstensi ini menggunakan atribut __ declspec sebelum deklarasi fungsi
. Perhatikan bahwa ketika fungsi C diakses dari C++ , mereka juga harus dinyatakan
sebagai extern " C " di C++ kode , untuk menginformasikan compiler
bahwa linkage C harus digunakan.
Selain menentukan fungsi yang diimpor atau diekspor menggunakan __ declspec
atribut , mereka mungkin tercantum dalam IMPOR EKSPOR atau bagian dari file DEF
digunakan oleh proyek . File DEF diproses oleh linker , bukan compiler , dan
dengan demikian tidak spesifik untuk C + + .
Kompilasi DLL akan menghasilkan baik file DLL dan LIB . File LIB digunakan
untuk menghubungkan melawan DLL pada saat kompilasi , itu tidak diperlukan
untuk run-time menghubungkan . Kecuali DLL Anda adalah Component Object Model
Server ( COM ) , file DLL harus ditempatkan dalam salah satu direktori yang
tercantum dalam variabel lingkungan PATH , di direktori default sistem , atau
dalam direktori yang sama dengan program menggunakannya . COM Server DLL
terdaftar menggunakan regsvr32.exe , yang menempatkan lokasi DLL dan ID yang
unik secara global nya ( GUID ) dalam registri . Program kemudian dapat
menggunakan DLL dengan melihat GUID dalam registri untuk menemukan lokasinya .
5.
Keuntungan
Menggunakan Dinamic Link Library
a)
Menggunakan lebih sedikit
sumber daya
Apabila
beberapa program menggunakan library fungsi yang sama, DLL dapat mengurangi
duplikasi kode yang dimuat di disk dan memori fisik. Hal ini dapat sangat
mempengaruhi kinerja tidak hanya program yang berjalan di latar depan, tetapi
juga program lain yang berjalan pada sistem operasi Windows.
b)
Meningkatkan arsitektur modular
DLL membantu
mempromosikan pengembangan modular program. Ini akan membantu Anda
mengembangkan program besar yang memerlukan beberapa versi bahasa atau program
yang memerlukan arsitektur modular. Contoh dari modular program adalah program
akuntansi yang memiliki banyak modul yang dapat dimuat secara dinamis pada
waktu jalan.
c)
Memudahkan penyebaran dan
penginstalan
Saat fungsi
dalam DLL memerlukan pembaruan atau perbaikan, penyebaran dan pemasangan DLL
tidak memerlukan program untuk relinked dengan DLL. Selain itu, apabila
beberapa program menggunakan DLL yang sama, beberapa program akan semua manfaat
dari pembaruan atau perbaikan. Masalah ini lebih sering terjadi ketika Anda
menggunakan DLL pihak ketiga yang diperbarui secara teratur atau diperbaiki.
d)
Keamanan Source Code Lebih Tinggi
Saat source code dimasukan kedalam
DLL source code akan sulit dibuka oleh orang lain, sehingga orang lain tidak
tau source code yang digunakan di dalam aplikasi tersebut. Karena Dll memiliki kemanan yang sangat
tinggi.
6.
Kerugian
Menggunakan Dinamic Link Library
Pembuatan file Dll cenderung lebih
rumit dan Ketika sebuah
program atau DLL menggunakan fungsi DLL lainnya, program ini tidak lagi
mandiri, dan program mungkin mengalami masalah jika ketergantungan rusak.
Sebagai contoh, program mungkin tidak berjalan jika salah satu tindakan berikut
terjadi:
·
DLL tergantung ditingkatkan ke versi baru.
·
DLL tergantung diperbaiki.
·
DLL tergantung akan ditimpa dengan versi yang lebih lama.
·
DLL tergantung akan dihapus dari komputer.
·
Aplikasi akan Error / Rusak jika
salah satu dll error.
Tindakan ini umumnya disebut sebagai konflik DLL. Jika
kompatibilitas mundur tidak didukung, program mungkin tidak berhasil
dijalankan.
Apabila Kita Ingin Mengedit aplikasi tersebut, kita harus
mengedit dll yang digunakan, kemudian di replace satu persatu dan di link kan
lagi seperti pembuatan awal.
7.
Run-time menghubungkan dinamis
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 fungsi DLL, Anda dapat menambahkan kunci
fungsi untuk fungsi DLL yang diekspor atau membuat berkas definisi (.def) modul
yang mencantumkan fungsi DLL yang diekspor.
__declspec(dllexport)
Untuk menggunakan fungsi kunci, Anda harus menyatakan setiap
fungsi yang ingin diekspor dengan kunci berikut ini:
__declspec(dllexport)
Biasanya,
Anda akan menggunakan satu file header yang telah menentukan pernyataan
dan ifdef pernyataan untuk memisahkan pernyataan ekspor dan impor
pernyataan.
Biasanya, Anda akan menggunakan satu header file yang
telah menentukan pernyataan dan pernyataan ifdef untuk memisahkan
pernyataan ekspor dan impor pernyataan.
//
SampleDLL.def
//
LIBRARY
"sampleDLL"
EXPORTS
HelloWorld
8. Titik entri DLL
Anda juga dapat menggunakan berkas definisi modul untuk
menyatakan fungsi DLL yang diekspor. Ketika Anda menggunakan berkas definisi
modul, Anda tidak harus menambahkan kunci fungsi untuk fungsi DLL yang
diekspor. Dalam berkas definisi modul, Anda menyatakan pernyataan Perpustakaan
dan pernyataan ekspor untuk DLL. Kode berikut ini adalah
contoh berkas definisi.
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);
}
...
B. Perbedaan
Dinamic Link Library Dengan Header Di C++
1. Perbedaan Menurut Pengertian
File header adalah sebuah file yang digunakan untuk
mendefinisikan beberapa file macro, fungsi, variabel dan konstan. File header
nantinya akan mengandung beberapa fungsi atau perintah yang akan digunakan
dalam program. File header ini sangat penting, karena beberapa perintah tidak
akan dapat dijalankan jika file header yang mendukung perintah tersebut tidak
ditulis dalam program. File header ini memiliki ciri bereksistensi “.h” dan
diarahkan oleh preprocessor dirrective #include sebagai gambaran kepada kompilator
bahwa beberapa fungsi yang terdapat dalam file header tersebut diikutkan dalam
pembuatan program. Sedangkan
File Dynamic Link Library (File Dll) adalah
file yang mengandung kode-fungsi yang dapat dipanggil
dari kode-executable (.exe) atau bisa juga di panggil dari
file Dll yang lain. Paling simple kalo disebut file library windows karena
umumnya hanya ada pada Sistem Operasi Windows, File Dll merupakan kode yang
sudah dikompilasi dan dapat digunakan oleh program lain bias juga di gunakan
oleh beberapa program. Jika kita meletakan fungsi ke dalam dll, berarti
fungsi tersebut dapat diakses oleh semua program pada saat yang bersamaan.
2. Perbedaan Aplikasi Menurut
Kapasitas Memory Space
Apabila kita membuat
sebuah aplikasi hanya memanfa’atkan header saja, source code yang ada di dalam
lembar kerja program (.cpp) akan cenderung banyak. Kinerja Akan melambat karena
mendebug baris perintah terlalu banyak ( biasanya debug per baris ). Dan hasil
Compile Aplikasi Akan Berukuran besar.
Sedangkan jika membuat sebuah
aplikasi memanfa’atkan Dinamic Link Library. Code yang ada di dalam lembar
kerja program (.cpp) akan cenderung lebih sedikit. Karena source – code induk
ada di dalam filde dll tersebut. Dan kinerja akan lebih cepat dari pada tidak
memakai .dll , dll bisa digunakan banyak aplikasi sekaligus. Seperti 5 buah
aplikasi 1 dll. Bisa juga 5 dll digunakan dalam 1 buah aplikasi jga bisa.
NB : Tunggu Artikel Selanjutnya Tentang Pembuatan Dinamic Link Library Dengan Bahasa C++ .
A. Dinamic
Link Library
1.
Pengertian
Dinamic Link Library
Dynamic Link Library
(File Dll) adalah file yang mengandung kode-fungsi yang
dapat dipanggil dari kode-executable (.exe) atau bisa juga
di panggil dari file Dll yang lain. Paling simple kalo disebut file library
windows karena umumnya hanya ada pada Sistem Operasi Windows, File Dll
merupakan kode yang sudah dikompilasi dan dapat digunakan oleh program lain bias
juga di gunakan oleh beberapa program. Jika kita meletakan fungsi ke
dalam dll, berarti fungsi tersebut dapat diakses oleh semua program pada saat
yang bersamaan. File Dll biasanya ditulis dengan bahasa C/C++, Delphi
atau bahasa lainnya yang mendukung Sistem Operasi Windows.
2.
Kegunaan
Dinamic Link Library
Eksistensi dari File
Dll paling utama ditujukan buat menyederhanakan suatu program. Karena
progam tersebut tidak perlu mempunyai kode progam untuk fungsi umumnya, tinggal
memanggil fungsi yang ada pada File Dll tersebut. Sebagai contoh sebelum kita
membuat sebuah program perkalian, kita membuat terlebih dahulu source-code
Fungsi perkalian di dalam file Dll, kemudian kita buat source-code aplikasi dan
dimana source-code aplikasi tersebut kita tinggal memanggil fungsi perkalian
yang sudah kita masukan di dalam File Dll Tersebut.
Jadi dengan kata lain
nama Dynamic Link Library bisa diartikan penyederhana program karena
source-code program induk ada di dalam File Dll tersebut. Jika Di Dalam Windows
dia adalah perpustakaan yang punya banyak list fungsi dan bisa dimanfaatkan
program yang ada di windows. Mereka disebut link dinamis (dynamic
link) karena mereka dimanfaatkan hanya ketika sebuah program memanggil mereka,
dan merekapun juga berjalan di ruang memori (memory area) tersendiri. Lebih
dari satu program dapat menggunakan fungsi DLL, bahkan pada waktu yang
sama. Sehingga struktur program aplikasi menjadi lebih sederhana, ringan
dan tidak banyak memakan ruang space.
3.
Fitur
Dinamic Link Library
a. Management
Memory
Pada
Windows API , file DLL akan disusun menjadi beberapa bagian . Setiap bagian
telah menetapkan sendiri atribut , seperti menjadi dapat ditulisi atau
read-only , executable ( kode ) atau non - executable ( untuk data ) , dan
sebagainya .
Kode dalam DLL biasanya dibagi di antara semua proses
yang menggunakan DLL , yaitu, mereka menempati satu tempat di memori fisik ,
dan tidak mengambil ruang dalam file halaman . Jika memori fisik yang ditempati
oleh bagian kode yang akan direklamasi , isinya dibuang , dan kemudian ulang
langsung dari file DLL yang diperlukan .
Berbeda dengan bagian kode , bagian data DLL biasanya
swasta, yaitu , setiap proses menggunakan DLL memiliki salinan dari semua data
DLL . Opsional , bagian data dapat dibuat bersama, yang memungkinkan
antar-proses komunikasi melalui daerah ini memori bersama . Namun, karena
pembatasan pengguna tidak berlaku untuk penggunaan memori bersama DLL , ini
menciptakan lubang keamanan , yaitu satu proses dapat merusak data bersama ,
yang kemungkinan akan menyebabkan semua proses sharing lainnya untuk
berperilaku tidak diinginkan . Sebagai contoh, sebuah proses yang berjalan di
bawah account tamu dapat dengan cara ini korup proses lain berjalan di bawah
account istimewa . Ini adalah alasan penting untuk menghindari penggunaan
bagian bersama dalam DLL .
Jika DLL dikompresi oleh packers executable tertentu
(misalnya UPX ) , semua bagian kodenya ditandai sebagai membaca dan menulis ,
dan akan unshared . Bagian kode read - and- write , seperti bagian data pribadi
, pribadi untuk setiap proses . Dengan demikian DLL dengan bagian data bersama
tidak harus dikompresi jika mereka dimaksudkan untuk digunakan secara bersamaan
oleh beberapa program , karena setiap contoh program yang akan harus membawa
salinan sendiri dari DLL , sehingga peningkatan konsumsi memori .
b. Import
Library
Seperti perpustakaan statis, perpustakaan impor untuk DLL dicatat
oleh ekstensi file. Lib. Sebagai contoh, kernel32.dll, perpustakaan dinamis utama
untuk fungsi Windows 'dasar
seperti pembuatan berkas dan manajemen memori, yang
dihubungkan melalui kernel32.lib.
Menghubungkan ke perpustakaan dinamis
biasanya ditangani dengan menghubungkan
ke sebuah perpustakaan impor
ketika membangun atau menghubungkan untuk membuat file eksekusi. Executable yang dibuat kemudian
berisi tabel alamat impor (IAT) dimana
semua panggilan fungsi DLL yang direferensikan
(masing-masing fungsi DLL direferensikan berisi
entri sendiri dalam IAT). Pada saat run-time, IAT diisi dengan alamat
yang tepat yang mengarah langsung ke fungsi dalam DLL terpisah dimuat.
c. Resolusi simbol dan mengikat
Setiap
fungsi yang diekspor oleh DLL diidentifikasi oleh ordinal numerik dan opsional
nama. Demikian juga , fungsi dapat diimpor dari DLL baik oleh ordinal atau
dengan nama . Ordinal tersebut merupakan posisi fungsi alamat pointer pada
Address tabel DLL Ekspor . Adalah umum untuk fungsi internal yang akan diekspor
oleh ordinal saja. Bagi sebagian besar fungsi Windows API hanya nama-nama yang
diawetkan di rilis Windows yang berbeda , ordinals dapat berubah . Dengan
demikian, kita tidak dapat dipercaya mengimpor fungsi API Windows dengan
ordinals mereka .
Mengimpor fungsi dengan ordinal memberikan kinerja yang
hanya sedikit lebih baik daripada mengimpor mereka dengan nama : tabel ekspor
DLL yang diperintahkan oleh nama , sehingga pencarian biner dapat digunakan
untuk mencari fungsi. Indeks nama yang ditemukan kemudian digunakan untuk
mencari ordinal dalam tabel Ekspor Ordinal . Pada 16 - bit Windows , tabel nama
tidak diurutkan , sehingga overhead nama lookup jauh lebih terlihat .
Hal
ini juga memungkinkan untuk mengikat dapat dieksekusi untuk versi tertentu dari
sebuah DLL , yaitu , untuk menyelesaikan alamat fungsi yang diimpor pada saat
kompilasi . Untuk impor terikat , linker akan menyimpan timestamp dan checksum
dari DLL yang impor terikat . Pada saat run -time Windows memeriksa untuk
melihat apakah versi yang sama dari perpustakaan yang digunakan, dan jika
demikian , Windows bypasses memproses impor . Jika tidak , jika perpustakaan
ini berbeda dari satu yang pasti , Windows proses impor secara normal .
Bound executables beban agak lebih cepat jika mereka
berjalan di lingkungan yang sama bahwa mereka dikompilasi untuk , dan waktu
yang tepat sama jika mereka berjalan di lingkungan yang berbeda , sehingga
tidak ada kelemahan untuk mengikat impor . Sebagai contoh, semua aplikasi
standar Windows terikat pada DLL sistem rilis Windows masing-masing . Sebuah
kesempatan yang baik untuk mengikat impor aplikasi untuk lingkungan target
adalah saat instalasi aplikasi . Hal ini membuat perpustakaan ' terikat '
sampai update OS berikutnya . Memang, bagaimanapun , mengubah checksum dari
executable , jadi itu bukan sesuatu yang bisa dilakukan dengan program
ditandatangani , atau program yang dikelola oleh manajemen konfigurasi alat
yang menggunakan checksum ( seperti MD5 checksum ) untuk mengelola versi berkas
. Karena semakin Windows versi terbaru sudah pindah dari memiliki alamat tetap
untuk setiap perpustakaan dimuat ( untuk alasan keamanan ) , peluang dan nilai
mengikat eksekusi menurun .
4.
Compiler
Menggunakan Bahasa C/C++
Microsoft
Visual C ( MSVC ) menyediakan beberapa ekstensi untuk standar C+ + yang
memungkinkan fungsi yang harus ditetapkan sebagai diimpor atau diekspor
langsung dalam C++, kode ini telah diadopsi oleh Windows C lainnya dan C++ compiler , termasuk versi
Windows GCC . Ekstensi ini menggunakan atribut __ declspec sebelum deklarasi fungsi
. Perhatikan bahwa ketika fungsi C diakses dari C++ , mereka juga harus dinyatakan
sebagai extern " C " di C++ kode , untuk menginformasikan compiler
bahwa linkage C harus digunakan.
Selain menentukan fungsi yang diimpor atau diekspor menggunakan __ declspec
atribut , mereka mungkin tercantum dalam IMPOR EKSPOR atau bagian dari file DEF
digunakan oleh proyek . File DEF diproses oleh linker , bukan compiler , dan
dengan demikian tidak spesifik untuk C + + .
Kompilasi DLL akan menghasilkan baik file DLL dan LIB . File LIB digunakan
untuk menghubungkan melawan DLL pada saat kompilasi , itu tidak diperlukan
untuk run-time menghubungkan . Kecuali DLL Anda adalah Component Object Model
Server ( COM ) , file DLL harus ditempatkan dalam salah satu direktori yang
tercantum dalam variabel lingkungan PATH , di direktori default sistem , atau
dalam direktori yang sama dengan program menggunakannya . COM Server DLL
terdaftar menggunakan regsvr32.exe , yang menempatkan lokasi DLL dan ID yang
unik secara global nya ( GUID ) dalam registri . Program kemudian dapat
menggunakan DLL dengan melihat GUID dalam registri untuk menemukan lokasinya .
5.
Keuntungan
Menggunakan Dinamic Link Library
a)
Menggunakan lebih sedikit
sumber daya
Apabila
beberapa program menggunakan library fungsi yang sama, DLL dapat mengurangi
duplikasi kode yang dimuat di disk dan memori fisik. Hal ini dapat sangat
mempengaruhi kinerja tidak hanya program yang berjalan di latar depan, tetapi
juga program lain yang berjalan pada sistem operasi Windows.
b)
Meningkatkan arsitektur modular
DLL membantu
mempromosikan pengembangan modular program. Ini akan membantu Anda
mengembangkan program besar yang memerlukan beberapa versi bahasa atau program
yang memerlukan arsitektur modular. Contoh dari modular program adalah program
akuntansi yang memiliki banyak modul yang dapat dimuat secara dinamis pada
waktu jalan.
c)
Memudahkan penyebaran dan
penginstalan
Saat fungsi
dalam DLL memerlukan pembaruan atau perbaikan, penyebaran dan pemasangan DLL
tidak memerlukan program untuk relinked dengan DLL. Selain itu, apabila
beberapa program menggunakan DLL yang sama, beberapa program akan semua manfaat
dari pembaruan atau perbaikan. Masalah ini lebih sering terjadi ketika Anda
menggunakan DLL pihak ketiga yang diperbarui secara teratur atau diperbaiki.
d)
Keamanan Source Code Lebih Tinggi
Saat source code dimasukan kedalam
DLL source code akan sulit dibuka oleh orang lain, sehingga orang lain tidak
tau source code yang digunakan di dalam aplikasi tersebut. Karena Dll memiliki kemanan yang sangat
tinggi.
6.
Kerugian
Menggunakan Dinamic Link Library
Pembuatan file Dll cenderung lebih
rumit dan Ketika sebuah
program atau DLL menggunakan fungsi DLL lainnya, program ini tidak lagi
mandiri, dan program mungkin mengalami masalah jika ketergantungan rusak.
Sebagai contoh, program mungkin tidak berjalan jika salah satu tindakan berikut
terjadi:
·
DLL tergantung ditingkatkan ke versi baru.
·
DLL tergantung diperbaiki.
·
DLL tergantung akan ditimpa dengan versi yang lebih lama.
·
DLL tergantung akan dihapus dari komputer.
·
Aplikasi akan Error / Rusak jika
salah satu dll error.
Tindakan ini umumnya disebut sebagai konflik DLL. Jika
kompatibilitas mundur tidak didukung, program mungkin tidak berhasil
dijalankan.
Apabila Kita Ingin Mengedit aplikasi tersebut, kita harus
mengedit dll yang digunakan, kemudian di replace satu persatu dan di link kan
lagi seperti pembuatan awal.
7.
Run-time menghubungkan dinamis
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 fungsi DLL, Anda dapat menambahkan kunci
fungsi untuk fungsi DLL yang diekspor atau membuat berkas definisi (.def) modul
yang mencantumkan fungsi DLL yang diekspor.
__declspec(dllexport)
Untuk menggunakan fungsi kunci, Anda harus menyatakan setiap
fungsi yang ingin diekspor dengan kunci berikut ini:
__declspec(dllexport)
Biasanya,
Anda akan menggunakan satu file header yang telah menentukan pernyataan
dan ifdef pernyataan untuk memisahkan pernyataan ekspor dan impor
pernyataan.
Biasanya, Anda akan menggunakan satu header file yang
telah menentukan pernyataan dan pernyataan ifdef untuk memisahkan
pernyataan ekspor dan impor pernyataan.
//
SampleDLL.def
//
LIBRARY
"sampleDLL"
EXPORTS
HelloWorld
8. Titik entri DLL
Anda juga dapat menggunakan berkas definisi modul untuk
menyatakan fungsi DLL yang diekspor. Ketika Anda menggunakan berkas definisi
modul, Anda tidak harus menambahkan kunci fungsi untuk fungsi DLL yang
diekspor. Dalam berkas definisi modul, Anda menyatakan pernyataan Perpustakaan
dan pernyataan ekspor untuk DLL. Kode berikut ini adalah
contoh berkas definisi.
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);
}
...
B. Perbedaan
Dinamic Link Library Dengan Header Di C++
1. Perbedaan Menurut Pengertian
File header adalah sebuah file yang digunakan untuk
mendefinisikan beberapa file macro, fungsi, variabel dan konstan. File header
nantinya akan mengandung beberapa fungsi atau perintah yang akan digunakan
dalam program. File header ini sangat penting, karena beberapa perintah tidak
akan dapat dijalankan jika file header yang mendukung perintah tersebut tidak
ditulis dalam program. File header ini memiliki ciri bereksistensi “.h” dan
diarahkan oleh preprocessor dirrective #include sebagai gambaran kepada kompilator
bahwa beberapa fungsi yang terdapat dalam file header tersebut diikutkan dalam
pembuatan program. Sedangkan
File Dynamic Link Library (File Dll) adalah
file yang mengandung kode-fungsi yang dapat dipanggil
dari kode-executable (.exe) atau bisa juga di panggil dari
file Dll yang lain. Paling simple kalo disebut file library windows karena
umumnya hanya ada pada Sistem Operasi Windows, File Dll merupakan kode yang
sudah dikompilasi dan dapat digunakan oleh program lain bias juga di gunakan
oleh beberapa program. Jika kita meletakan fungsi ke dalam dll, berarti
fungsi tersebut dapat diakses oleh semua program pada saat yang bersamaan.
2. Perbedaan Aplikasi Menurut
Kapasitas Memory Space
Apabila kita membuat
sebuah aplikasi hanya memanfa’atkan header saja, source code yang ada di dalam
lembar kerja program (.cpp) akan cenderung banyak. Kinerja Akan melambat karena
mendebug baris perintah terlalu banyak ( biasanya debug per baris ). Dan hasil
Compile Aplikasi Akan Berukuran besar.
Sedangkan jika membuat sebuah
aplikasi memanfa’atkan Dinamic Link Library. Code yang ada di dalam lembar
kerja program (.cpp) akan cenderung lebih sedikit. Karena source – code induk
ada di dalam filde dll tersebut. Dan kinerja akan lebih cepat dari pada tidak
memakai .dll , dll bisa digunakan banyak aplikasi sekaligus. Seperti 5 buah
aplikasi 1 dll. Bisa juga 5 dll digunakan dalam 1 buah aplikasi jga bisa.
NB : Tunggu Artikel Selanjutnya Tentang Pembuatan Dinamic Link Library Dengan Bahasa C++ .