Mari dibahas baris per baris...
- Code: Select all
Private Static Sub GetWord(LongValue As Long, CryptBuffer() As Byte, Offset As Long)
- Code: Select all
Private Static Sub PutWord(LongValue As Long, CryptBuffer() As Byte, Offset As Long)
Kalau saya pelajari, kedua sub di atas, maka saya berpendapat:
1. GetWord => bertujuan mengdapatkan nilai Word (4 byte) "LongValue" dari suatu alamat memory "Offset". Hasilnya ditampung di variabel "LongValue", sedangkan alamat memory yang dimaksud adalah "Offset". Variabel "CrypBuffer()" adalah variabel perantara.
2. PutWord => Kebalikannya, yaitu mengcopy nilai Word "LongValue" ke alamat memory "Offset".
Berikutnya:
- Code: Select all
Call CopyMem(xxx, yyy, zzz)
Ini sesungguhnya adalah perintah WIndows API, dengan bentuk:
- Code: Select all
[Private/Public] Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Tujuan as Any, Sumber as Any, ByVal Ukuran as Long)
Jadi sebetulnya GetWord dan PutWord dapat lebih disederhanakan lagi, nggak perlu memakai "Buffer", seperti ini:
- Code: Select all
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlMoveMemory" (Tujuan as Any, Sumber as Any, ByVal Ukuran as Long)
Private Sub GetWord(LongValue As Long, Offset As Long)
CopyMem LongValue, ByVal Offset, 4
End Sub
Private Sub PutWord(LongValue As Long, Offset As Long)
CopyMem ByVal Offset, LongValue, 4
End Sub
Atau langsung saja memanggil "Sub CopyMem" tanpa harus membuat kode tambahan lagi yang isinya hanya mengganti syntax
CMIIW