Setelah melakukan pencarian di PHP Manual, saya menemukan bagian
COM and .Net (Windows) yang dapat diakses di
www.php.net/manual/en/book.com.php. PHP memang mendukung
Component Object Model (COM) dan
.NET. Lalu apa hubungan
COM dan
DLL?
- DLL (Dynamic-link Library) adalah implementasi shared-library di platform Windows. Programmer membuat fungsi yang dapat dipanggil ulang di program berbeda.
- COM (Component Object Model) adalah sebuah metodologi yang mengatur bagaimana menerapkan komponen program yang dapat dipakai ulang di program berbeda.
- COM tidak mengatur struktur bahasa yang dipakai (menurut referensi MSDN, COM sering salah kaprah diangagp sebagai OOP).
- Implementasi COM umumnya dalam bentuk file DLL.
- Tidak semua DLL dibuat berdasarkan aturan COM, atau dengan kata lain tidak semua DLL adalah COM.
Jadi jawaban untuk mahasiswa tersebut adalah: bila
DLL dibuat dengan menggunakan teknologi
COM, maka
DLL tersebut dapat diakses di
PHP. Bila DLL tersebut adalah DLL sederhana, maka DLL tersebut tidak dapat diakses di PHP.
Lalu bagaimana bila ingin tetap mengakses DLL sederhana di PHP? Ada
sebuah extension PHP yang dikhususkan untuk Windows yang bernama
WinBinder. Dengan
WinBinder,
programmer PHP dapat memanggil semua APIs Windows dengan PHP, membuat
program GUI berbasis PHP, bahkan memanggil DLL sederhana (tanpa COM)
dengan PHP.
Pada artikel ini, saya akan menggunakan teknologi sebagai berikut:
- Visual C++ di Visual Studio 2010 untuk menghasilkan DLL yang mengikuti spesifikasi COM.
- Memakai ATL (Active Template Library) di Visual C++ untuk membuat COM. ATL bukan bagian dari COM ataupun bahasa C++ melainkan sebuah framework sebagai bagian dari Visual C++ untuk mempermudah pembuatan COM.
- PHP untuk mengakses DLL yang dihasilkan oleh Visual C++
Untuk membuat COM di Visual C++ dengan bantuan ATL, pilih menu
File,
New,
Project di Visual Studio 2010. Kemudian pada
Visual C++, pilih
ATL Project.
Beri nama pada project tersebut, misalnya LatihanCOM. Tentukan juga
lokasi folder untuk penyimpanan project tersebut. Kemudian klik tombol
OK.
Membuat Project ATL Baru
Akan muncul ATL Project Wizard yang terdiri atas dua langkah. Klik tombol
Next pada wizard tersebut. Pastikan pada
Application Type, pilihan
Dynamic-link library (DLL) terpilih. Kemudian klik tombol
Finish untuk membuat project.
ATL Project Wizard
Setelah project selesai dibuat, buka panel
Class View. Bila panel ini tertutup, pilih menu
View,
Class View (Ctrl+Shift+C) untuk menampilkannya. Klik kanan pada nama project,
LatihanCOM, kemudian pilih
Add,
Class… Pada window
Add Class yang muncul, pilih
ATL Simple Object. Kemudian klik tombol
Add untuk melanjutkan.
Tampilan Dialog Add Class
Pada tampilan
ATL Simple Object Wizard yang muncul, ketik nama
Perhitungan di
Short name. Nama lain akan di-isi secara otomatis. Pastikan bahwa di bagian
COM, nama
Interface adalah
IPerhitungan. Kemudian isi
ProgID dengan nama
Jocki.Perhitungan. Window tersebut harus terlihat seperti berikut ini:
ATL Simple Object Wizard
Klik tombol
Finish untuk menyelesaikan wizard.
Buka panel
Class View dan cari COM Interface yang bernama
IPerhitungan. Interface ini dibuat secara otomatis oleh Visual C++ sehingga yang perlu kita lakukan hanya menambahkan
method yang akan dipanggil oleh program lain. Klik kanan pada
IPerhitungan, kemudian pilih
Add,
Add Method…
Menambah Method Pada COM Interface
Pada dialog
Add Method Wizard yang muncul, kita akan
membuat sebuah method sederhana. Method ini akan menerima parameter
berupa dua buah bilangan bulat, kemudian mengembalikan hasil jumlah dua
bilangan tersebut. Pada method name, beri nama
HitungJumlah. Kemudian tambahkan dua parameter input dengan mengikuti langkah ini:
- Beri centang pada checkbox in di Parameter attributes.
- Ketik int di Parameter type.
- Ketik nilai1 di Parameter name.
- Klik tombol Add.
- Beri centang pada checkbox in di Parameter attributes.
- Ketik int di Parameter type.
- Ketik nilai2 di Parameter name.
- Klik tombol Add.
Setelah menambahkan parameter, tambahkan nilai kembalian dengan mengikuti langkah ini:
- Ketik int* di Parameter type. Jangan lupa menambahkan * setelah int karena variabel ini akan merujuk ke hasil kembalian (pointer). Bila tidak ada * setelah int, wizard tidak akan memberikan pilihan untuk mencentang checkbox out dan retval di langkah berikutnya.
- Beri tanda centang checkbox out dan checkbox retval.
- Ketik hasil pada Parameter name.
- Klik tombol Add.
Tampilan wizard akan terlihat seperti berikut ini:
Tampilan Add Method Wizard
Klik tombol
Finish untuk menyelesaikan wizard.
Cari baris kode program seperti berikut ini di file
Perhitungan.cpp:
STDMETHODIMP CPerhitungan::HitungJumlah(int nilai1, int nilai2, int* hasil)
{
// TODO: Add your implementation code here
return S_OK;
}
Kode program ini merupakan implementasi dari method yang akan dipanggil oleh PHP nantinya. Ganti baris yang diawali dengan
//TODO sehingga kode programnya akan terlihat seperti berikut ini:
STDMETHODIMP CPerhitungan::HitungJumlah(int nilai1, int nilai2, int* hasil)
{ *hasil = nilai1 + nilai2;
return S_OK;
}
Langkah terakhir sebelum menghasilkan DLL adalah melakukan sedikit perubahan pada settingan project. Buka panel
Solution Explorer. Bila panel ini tertutup, pilih menu
View,
Solution Explorer (Ctrl+Alt+L). Klik kanan pada nama project,
LatihanCOM, kemudian pilih
Properties. Pada baris
Per-user Redirection, ganti nilai
No menjadi
Yes. Hal ini dilakukan untuk menghindari hal-hal yang berkaitan dengan masalah hak akses user. Dengan mengaktifkan
Per-user Redirection, DLL yang dihasilkan hanya akan tersedia oleh user Windows yang sedang aktif saat ini saja.
Untuk membuat
DLL, pilih menu
Build,
Build Solution (Ctrl+Shift+B).
File DLL yang dihasilkan terletak di folder Debug di lokasi penyimpanan
project. Sebagai contoh, jika saya menyimpan project di Desktop, maka
file DLL yang dihasilkan adalah
C:\Users\JockiHendry\Desktop\LatihanCOM\Debug\LatihanCOM.dll. Visual C++ 2010 telah melakukan registrasi DLL secara otomatis sehingga kita tidak perlu repot-repot lagi.
Sekarang, kita akan melakukan pengujian apakah DLL tersebut dapat
dipanggil dengan baik. Buat sebuah file PHP dengan isi seperti berikut
ini:
HitungJumlah(11,22);
print "Hasil dari method di COM DLL adalah $hasil";
?>
Bila kode program PHP di atas dijalankan, hasilnya adalah:
Hasil dari method di COM DLL adalah 33
Apa langkah berikutnya?
- Ingin memanggil COM yang berada di komputer lain? Pelajari Distributed COM (DCOM) lebih lanjut.
- Tidak ingin memakai teknologi COM melainkan ingin memakai simple DLL? Lihat solusi yang ditawarkan oleh Winbinder.
- Walaupun Microsoft tidak menghentikan dukungan atas COM, teknologi
tersebut sudah kadaluarsa dan kini digantikan oleh penerusnya. Ingin
beralih ke .NET? Pelajari lebih lanjut tentang .NET Component.