|
|
|
|
API di Windows. Copiare una struttura Type su un array di Byte |
|
|
 Stampa |
Torna Indietro |
| Linguaggio: Visual Basic |
Autore: Mauro Puddinu |
Data Archiviazione: 14/07/1999 |
Possiamo usare la funzione API CopyMemory per copiare una struttura Type su un array di Byte e viceversa. Questo può essere utile per passare strutture a oggetti COM come classi e controlli ActiveX che non riconoscono le strutture, ma accettano gli array di Byte. Oltre a CopyMemory è necessario usare la funzione VBA non documentata VarPtr(), che restituisce un puntatore (indirizzo di memoria) ad una variabile qualsiasi (eccetto stringhe e oggetti). Da notare che queste funzioni vanno usate con strutture che NON contengono stringhe a lunghezza variabile, Variant o oggetti. Ecco le due funzioni con un esempio di come richiamarle:
'CopyMemory: usare ByVal per passare indirizzi e stringhe: i parametri 'sono stati dichiarati come As Any per usare una sola funzione per 'tutti i tipi di dati
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
'Copia una struttura Type su un array di Byte. Bisogna passare 'indirizzo della struttura Type con la funzione VarPtr() e la sua 'lunghezza calcolata con LenB(). L'array DEVE essere vuoto per 'poter essere ridimensionato
Public Sub CopyTypeToBYTE(ByVal pType As Long, ArrayDest() As Byte, _ ByVal iNElements As Integer, _ Optional ByVal iBase As Integer = 0)
ReDim ArrayDest(iBase To iNElements - 1) CopyMemory ArrayDest(iBase), ByVal pType, iNElements End Sub
'Copia un array di Byte su una struttura Type Public Sub CopyBYTEToType(ArraySource() As Byte, ByVal pType As Long, _ ByVal iNElements As Integer)
Dim iInizio As Integer iInizio = LBound(ArraySource) CopyMemory ByVal pType, ArraySource(iInizio), iNElements End Sub
'Uso delle funzioni Dim t As MiaStruct Dim aByte() As Byte t.campo1 = "Mia struct"
'Copia struttura su array CopyTypeToByte ByVal VarPtr(t), aByte(), LenB(t)
'Copia array su struttura CopyByteToType aByte(), ByVal VarPtr(t), LenB(t)
|
|
Note:
(Nessuna)
|
Codice testato con: Visual Basic
Versione: 6.0 (Service Pack 5)
Sito Produttore: http://www.microsoft.com/
|
|
|
Chi c'è online
|
In questo momento ci sono
12
Visitatori
|
|