Tuo IP: 54.234.126.92  
Cerca nel sito:
Home Ansi C ASP HTML Java JavaScript Visual Basic C++ JSP VB.Net
Altri linguaggi
* AppleScript
* Assembler MIPS
* Fortran
* Lisp
* Pascal
* Perl
* Python
* SQL
* VBScript
* VBA

Servizi
* Tips
* Tools
* Webmasters
* Domini e Posta

Articoli tecnici
* Oracle Sequence
* Java Servlet
* Compressione File
* Le Socket di Berkeley
* Immagini x PC
* Errori di Email
* Flash del BIOS
* No Banner
* Codici a barre
* Codici Colori
* Estensione domini
* Connessione ODBC
* Tabella Codici ASCII
* Tabella ISO-8859-1
Altro su Tips
API di Windows. Copiare una struttura Type su un array di Byte
Versione Stampabile
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/
--------
Guide
PDF
* Hardware
* Guida all'MS DOS
* Storia di Internet
* Usabilità siti Web
* Programmazione Linux (6.852 KB)
* PHP
* Scripting Shell Bash
* HTML
* MySQL
* Ansi C
* Java 2

Ordinamenti
* Bubble Sort
* Insertion Sort
* Merge Sort
* Quick Sort
* Selection Sort
* Shell Sort
(La visualizzazione degli esempi richiede Virtual Java Machine)



Miscellanea
* Download
* Conversioni misure
* Glossario
* Siti lavoro

Chi c'è online
In questo momento ci sono 12 Visitatori