Pages

23 December 2010

Menambahkan Form Pada DLL

Sumber: Klik kanan

Dynamic Link Library atau DLL merupakan file yang berisi rutin (procedure dan function) yang dapat dipanggil dari file EXE maupun dari file DLL lain. Dengan meletakkan rutin-rutin pada file DLL (terpisah dari file EXE) maka terdapat beberapa keuntungan.
Pertama, rutin-rutin yang bersifat umum dapat dipakai oleh beberapa aplikasi pada saat yang bersamaan dan hanya diperlukan satu copy di memory atau disk. Anda dapat mengatur supaya rutin-rutin yang terdapat pada DLL tersebut dimuat ke memory hanya saat diperlukan saja. Jika tidak diperlukan maka DLL tersebut dapat dibuang dari memory. Dengan demikian aplikasi yang Anda buat dapat lebih menghemat penggunaan memory.
Keuntungan kedua, aplikasi menjadi bersifat modular. Anda dapat melakukan update aplikasi yang Anda buat tanpa harus mengupdate file EXE. Dengan demikian Anda cukup menyertakan patches kepada program Anda tanpa Anda harus menyertakan seluaruh aplikasi.

Keuntungan lain adalah ukuran file EXE menjadi lebih kecil karena beberapa kode program diletakkan pada file DLL.
Membuat file DLL
Untuk membuat file DLL, caranya pilih menu File | New | DLL. Anda dapat menyimpan project tersebut dengan ProyekDLL.dpr.

Pada code editor dapat Anda perhatikan pada bagian paling atas terdapat klausa library. Hal ini menandakan bahwa proyek yang sedang dibuat adalah proyek file DLL. Selanjutnya tambahkan form dari menu File | New Form. Form tersebut harus ditambahkan ke dalam project, yaitu dengan memilih menu Projet | Add to Project dan pilih file unit dari Form (pada contoh ini adalah FormDLL.pas). Contoh DLL ini mempunyai dua method (satu procedure dan satu function) yang berfungsi untuk menampilkan form. Satu menggunakan Show dan satunya lagi menggunakan ShowModal.
procedure ShowFormDLL;stdcall;
  1. begin
  2. frmFormDLL :=TfrmFormDLL.Create(nil);
  3. frmFormDLL.Show;
  4. end;
Prosedur di atas, pertama kali akan membuat form. Parameter nil digunakan, karena kita tidak mengetahui siapa pemilik (owner) formnya. Selanjutnya form yang baru dibuat tersebut akan ditampilkan dengan menggunakan method Show.
Untuk menampilkan form secara modal caranya sedikit berbeda.
function ShowFormDLLModal:integer;stdcall;
  1. begin
  2. frmFormDLL := TfrmFormDLL.Create(nil);
  3. Result := frmFormDLL.ShowModal;
  4. end;
Perbedaan antara kode di atas dan kode sebelumnya adalah, bahwa kode di atas adalah function, sedangkan kode sebelumnya adalah procedure, kode di atas menggunakan ShowModal sedangkan kode sebelumnya menggunakan Show. Dengan menggunakan ShowModal Anda dapat mengetahui modal result dari form.
Pada kedua kode tersebut kita membuat form tapi tanpa pernah melakukan destroy, yang bisa mengakibatkan pemborosan memory (leaking memory). Oleh karena itu Anda perlu melakukan destroy pada form. Salah satu cara termudah adalah dengan menggunakan event OnClose dari form dan mengeset TCloseAction menjadi caFree.
procedure TfrmFormDLL.FormClose(Sender: TObject; var Action: TCloseAction);
  1. begin
  2. Action := caFree;
  3. end;
Langkah terakhir adalah melakukan eksport procedure ShowFormDLL dan function ShowFormDLLModal di atas sehingga dapat digunakan atau dipanggil oleh program lain.
Exports
  1. ShowFormDLL,
  2. ShowFormDLLModal;
  3.  
  4. begin
  5.  
  6. end.
Untuk membuat kode di atas menjadi file DLL Anda dapat memilih menu Project | Build.
Memanggil DLL secara statis
Setelah Anda berhasil membuat DLL, selanjutnya Anda dapat membuat aplikasi yang akan memanggil rutin yang terdapat pada DLL tersebut. Untuk itu, pilih menu File | New Application. Selanjutnya Anda dapat menuliskan kode di bawah ini sebelum klausa implementation.
procedure ShowForm;stdcall;external 'ProyekDLL.dll' name 'ShowFormDLL';
  1. function ShowFormModal:integer;stdcall;external 'ProyekDLL.dll' name 'ShowFormDLLModal';
Klausa external digunakan untuk memberitahu compiler bahwa aplikasi tersebut membutuhkan rutin ShowFormDLL dan ShowFormDLLModal yang terletak pada file eksternal (file di luar program utama) bernama ProyekDLL.dll. Selanjutnya rutin ShowFormDLL dan ShowFormDLLModal akan dipanggil pada event OnClick dari Button1 dan Button2.
procedure TForm1.Button1Click(Sender: TObject);
  1. begin
  2. ShowDllForm;
  3. end;
  4.  
  5. procedure TForm1.Button2Click(Sender: TObject);
  6. begin
  7. ShowDllFormModal;
  8. end;
Memanggil DLL secara dinamis
Cara di atas tentunya belum sesuai dengan harapan Anda yang akan mengefisienkan penggunaan memory, karena program di atas akan selalu meloading DLL pada saat aplikasi pertama kali dijalankan. Cara yang kedua ini akan lebih efisian, yaitu dengan memanggil DLL secara dinamis. Dengan kata lain DLL akan dimuat ke memory hanya pada saat diperlukan saja.
Untuk dapat menggunakan rutin yang terdapat pada suatu file DLL, terlebih dahulu Anda harus memanggil file DLL tersebut. Caranya yaitu dengan memanggil fungsi LoadLibrary. Fungsi ini mempunyai sebuah parameter, yaitu nama file DLL yang akan dibuka.
DLLHandle := LoadLibrary('ProyekDLL.dll');
  1. Jika DLL berhasil dibuka maka fungsi LoadLibrary akan mengembalikan nilai bukan nol. Sebaliknya jika gagal akan mengembalikan nilai nol. Setelah DLL berhasil diloading ke dalam memory, selanjutnya Anda dapat memanggil rutin yang terdapat pada DLL tersebut. Yang perlu diperhatikan, Anda tidak dapat menggunakan nama fungsi melainkan dengan memanggil alamatnya. Untuk memanggil alamat fungsi Anda dapat menggunakan fungsi GetProcAddress.
  2. Fungsi GetProcAddress mempunyai dua parameter, parameter pertama adalah handle dari DLL, sedangkan parameter kedua adalah nama fungsi yang akan dipanggil.
  3. <pre lang="Delphi">if DLLHandle <> 0 then
  4. begin
  5. @ShowForm := GetProcAddress(DLLHandle, 'ShowFormDLL');
  6. @ShowFormModal := GetProcAddress(DLLHandle, 'ShowFormDLLModal');
  7. ShowFormModal;
  8. end;
Setelah Anda selesai menggunakan DLL, Anda dapat membuang DLL tersebut dari memory. Caranya yaitu dengan memanggil fungsi FreeLibrary.
FreeLibrary(DLLHandle);

No comments:

Post a Comment