Ide: Membuat Library dan membuka DLL / so dengan Lazarus


Beberapa hari yang lalu ada sebuah ide muncul di kepala ini, bagaimana kalau seandai-nya bisa memecah modul program yang aku buat menjadi beberapa file yang bisa di update atau di buang setiap saat, dengan modul konfigurasi tentu-nya.
Maka di mulai lah perjalanan-ku dalam mencari bagaimana cara-nya di lazarus, tentu saja memang solusi-nya yang sekilas keluar di mata adalah BPL, cuma masalah-nya kalau di lazarus tidak bisa compile library dan di load pada saat runtime, hilang 1 opsi, maka setelah itu aku coba cari opsi lain, AHA ! DLL aja tuh.. Dynamic Link Library kalau di windows, .so kalau di linux.. di Mac aku ngga tau.. setelah beberapa saat browsing.. aku menemukan beberapa kendala dalam penggunaan dan pembuatan library di lazarus dan sangat mencolok adalah ngga bisa-nya fungsi ShareMem yang ngga bisa di pakai.
tapi memang belum afdol kalau tidak dicoba sendiri.

oke..
pertama kita bikin library-nya..
  • Buka IDE Lazarus
  • Buka New.. Project | Library
  • Setelah itu kita akan di sajikan editor windows tanpa ada yang lain-nya, kita coba simpan dulu dengan nama Library1
  • Mari kita lanjutkan dengan membuat 1 buah function dengan 1 parameter by reference dengan tipe PPChar
function test(var x:PPChar):Integer;export;
  • Untuk definisi variable-nya kita isi dengan
s: String;
  • Lalu kita isi badan-nya dengan
01| s := 'Hello_World';
02| x := StringToPPChar(s,0);
  • selanjutnya kita compile project tersebut
  • dan Voila ! file lib kita sudah jadi.. cari file Library1.lib
Lalu setelah Library-nya jadi, selanjut-nya kita buat aplikasi untuk memanggil-nya
  • Buka IDE Lazarus
  • Buka New.. Project | Application
  • Pada form pasang sebuah button
  • Pada definisi uses tambahkan unit DynLibs
  • Pada daftar variable di even OnClick tuliskan
l : TLibHandle;
f: function (var x:PPChar) :integer;
s: String;
p: PPChar;
  • selanjut-nya pada bagian badan tuliskan
01| l := LoadLibrary('library1.dll');
02| pointer(f) := GetProcAddress(l, 'test');
03| f( p);
04| s:=StrPas(p^);
05| showmessage(s);
06| FreeLibrary(l);
  • dan itu lah semua, yang perlu di lakukan selanjut-nya cuma tekan F9 untuk mencoba eksekusi program tersebut
  • Pada form tampilan tersebut tekan Button yang ada, dan kita akan melihat sebuah message box tang akan menampilkan kata Hello_World yang kita buat di Library bukan di Aplikasi-nya.
  • Ini menunjukkan bahwa lazarus bisa membuat library dan menggunakan library dinamis(Dynamic Library)
Keren kan? memang lazarus bisa di gunakan untuk membuat dan menggunakan library, tapi...
(memang ada tapi-nya sih) dengan cara di atas kita tidak bisa membuat library yang mengalokasikan memory di dalam library dan membagikan area memory tersebut ke pemanggil/host, saat ini aku sedang melihat kemungkinan ada cara lain dengan memanfaatkan memory manager, apa itu? aku sendiri belum tahu.. sedang membaca lebih lanjut
mungkin kalau sudah penasaran duluan silakan buka
di bagian bawah ada link yang memberikan contoh yang seperti-nya cukup menarik

referensi:

Komentar

Postingan populer dari blog ini

Waaarrrggghhhh Waarrgghhh ? (What happened ?i)

software application