LO-HIWord




Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
'Restituisce la parola bassa di un Long

Public Function LoWord(ByVal l As Long) As Integer
If (l And &H8000&) = 0 Then
LoWord = l And &HFFFF&
Else
LoWord = &H8000 Or (l And &H7FFF&)
End If
End Function

'Restituisce la parola alta di un Long

Public Function HiWord(ByVal l As Long) As Integer
Dim lAddress As Long
lAddress = VarPtr(l) + 2
CopyMemory HiWord, ByVal lAddress, 2
End Function

Quando si usano le API di Windows spesso e' necessario estrarre
due interi a 16 bit (Integer) da un intero a 32 bit (Long), uno
nella parola bassa e uno nella parola alta. Questo e' necessario
ad esempio quando vogliamo gestire certi messaggi con SendMessage.
Possiamo usare allo scopo la funzione API CopyMemory in
combinazione con la funzione VBA non documentata VarPtr(), che
restituisce un puntatore (indirizzo di memoria) ad una
variabile qualsiasi (eccetto stringhe e oggetti). La funzione
LoWord e' completamente VB, mentre la HiWord usa l'approccio con
puntatori:










( lohiword.html )- by Paolo Puglisi - Modifica del 17/12/2023