PEMROGRAMAN API - PERTEMUAN 3 -
API parameter types Terdapat parameter yang asing seperti VOID, LPCSTR or DWORD. Bila anda familiar dengan C, maka anda mustinya sudah mengetahui tipe tersebut
API parameter types Contoh lain adalah HWND, HDC, HMENU Kesemuanya diawali dengan huruf “H”, yang artinya adalah handle untuk tipe object yang berbeda
API parameter types Misalnya HBITMAP adalah handle untuk BITMAP, HBRUSH adalah handle untuk BRUSH, dan lain-lain Semuanya dikonversikan ke Long dan harus dipassingkan secara ByVal
API parameter types Beberapa Type diawali dengan LP. Merupakan singkatan dari Long Pointer. Jadi LPWORD sebenarnya adalah alokasi memori dimana data disimpan Ketika anda memassing argumen dengan menggunakan ByRef (default), maka anda sebenarnya memassing alamat
API parameter types Ingat, bila parameter type anda diawali dengan LP, maka anda harus memassingnya secara ByRef. Tapi LPARAM adalah sama seperti Lparam, bukan LParam. Artinya dia bukan pointer. Anda harus memassingnya secara ByVal
API parameter types Untuk type NULL. Biasanya dipassing sebagai ByVal 0& atau sebagai vbNullString. Untuk type VOID. Ingatlah deklarasi haruslah berbentuk Sub.
Any Beberapa messages mengandung parameter yang dideklarasikan sebagai Any. Artinya parameter bisa bervariasi Anda bisa memassing integer, string, user defined types, ataupun yang lainnya Berikut ini adalah contoh function ( SendMessage ) yang mengandung parameter bertype Any
Any Public Declare Function SendMessage Lib "User32" Alias "SendMessageA" ( ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as Any ) as Long
Any lParam dideklarasikan ByRef (default) sebagai Any. Aturan yang harus diikuti bila memassing type berbeda kepada lParam. Numeric ByVal (As Long, or As Any ) Null ByVal (As Long, or As Any ) String ByRef (As String, or As Any ) Type ByRef (As Any ) array of Type ByRef (As Any )
Any CONTOH: Call SendMessage (Me.Hwnd, WM_XXXX, 0&, ByVal LongValue )
Any Tiga parameter pertama adalah standar. Karena dideklarasikan secara ByVal. Parameter keempat ( LongValue ) jika dibiarkan, maka akan dilakukan secara ByRef. Sebab VB tidak mengenali parameter apa yang akan dipassing Oleh karena itu, harus ditulis secara eksplisit ByVal di depannya
Any Lebih mudah bila kita membuat beberapa versi dari satu fungsi yang sama. Penting untuk pemanggilan yang berbeda
Any Public Declare Function SendMessageLng Lib "User32" Alias "SendMessageA" (ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, ByVal lParam as Long ) as Long
Any Public Declare Function SendMessageStr Lib "User32" Alias "SendMessageA" (ByVal Hwnd as Long, ByVal wMsg as Long, ByVal wParam as Long, lParam as String ) as Long
Any Perhatikan bahwa tipe parameter tidak mengubah API. Parameter keempat adalah selalu 4-byte. Ketika kita memassing nilai Long atau Null ByVal, 4-byte value akan dipassing secara langsung ke function.
Any Namun apabila yang dipassing adalah String atau yang lainnya, maka yang terjadi adalah ByRef sehingga VB sebenarnya memassing alamat dari variabel tersebut, yaitu nilai 4-byte value.
- QUESTION ? -