Translate

Tuesday, August 23, 2016

PEMROGRAMAN API [API parameter types]



PEMROGRAMAN API [API parameter types]

API parameter types
p  Terdapat parameter yang asing seperti VOID, LPCSTR or DWORD.
p  Bila anda familiar dengan C, maka anda mustinya sudah mengetahui tipe tersebut
p  Contoh lain adalah HWND, HDC, HMENU
p  Kesemuanya diawali dengan huruf “H”, yang artinya adalah handle untuk tipe object yang berbeda
p  Misalnya HBITMAP adalah handle untuk BITMAP, HBRUSH adalah handle untuk BRUSH, dan lain-lain
p  Semuanya dikonversikan ke Long dan harus dipassingkan secara ByVal
p  Beberapa Type diawali dengan LP. Merupakan singkatan dari Long Pointer.
p  Jadi LPWORD sebenarnya adalah alokasi memori dimana data disimpan
p  Ketika anda memassing argumen dengan menggunakan ByRef (default), maka anda sebenarnya memassing alamat
p  Ingat, bila parameter type anda diawali dengan LP, maka anda harus memassingnya secara ByRef.
p  Tapi LPARAM adalah sama seperti Lparam, bukan LParam. Artinya dia bukan pointer. Anda harus memassingnya secara ByVal
p  Untuk type NULL. Biasanya dipassing sebagai ByVal 0& atau sebagai vbNullString.
p  Untuk type VOID. Ingatlah bahwa API tidak mempunyai Sub.
Any
p  Beberapa messages mengandurng parameter yang dideklarasikan sebagai Any.
p  Artinya parameter bisa bervariasi
p  Anda bisa memassing integer, string, user defined types, ataupun yang lainnya
p  Berikut ini adalah contoh function (SendMessage) yang mengandung parameter bertype 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

p  lParam dideklarasikan ByRef (default) sebagai Any.
p  Aturan yang harus diikuti bila memassing type berbeda kepada lParam.
n  Numeric               à ByVal (As Long, or As Any)
n  Null                        à ByVal (As Long, or As Any)
n  String                    à ByRef (As String, or As Any)
n  Type                      à ByRef (As Any)
n  array                      à of Type ByRef (As Any)
p  CONTOH:
                Call SendMessage
                (              Me.Hwnd,
                                WM_XXXX,
                                0&,
                                ByVal LongValue
                )
p  Tiga parameter pertama adalah standar. Karena dideklarasikan secara ByVal.
p  Parameter keempat (LongValue) jika dibiarkan, maka akan dilakukan secara ByRef. Sebab VB tidak mengenali parameter apa yang akan dipassing
p  Oleh karena itu, harus ditulis secara eksplisit ByVal di depannya
p  Lebih mudah bila kita membuat beberapa versi dari satu fungsi yang sama.
p  Penting untuk pemanggilan yang berbeda
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
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
p  Perhatikan bahwa tipe parameter tidak mengubah API.
p  Parameter keempat adalah selalu 4-byte.
p  Ketika kita memassing nilai Long atau Null ByVal, 4-byte value akan dipassing secara langsung ke function.
p  Namun apabila yang dipassing adalah String atau yang lainnya, maka yang terjadi adalah ByRef
p  sehingga VB sebenarnya memassing alamat dari variabel tersebut, yaitu nilai 4-byte value.

No comments:

Post a Comment

silahkan membaca dan berkomentar