Passare un'area riservata di memoria ad una funzione esterna
Qualora una funzione esterna preveda che le si passi una Struttura, o comunque un'altra area allocata di memoria, per mezzo di un puntatore a questa Struttura, affinché questa venga riempita dalla funzione medesima magari con due o più valori, che possono essere anche di tipo diverso; e che successivamente si debba procedere alla dereferenziazione, procederemo nel modo seguente:
1) allocheremo una sufficiente quantità di memoria, che sarà puntata da una variabile di tipo puntatore;
2) passeremo tale puntatore alla funzione esterna che provvederà a riempirla;
3) procederemo alla dereferenziazione. Se il valore restituito dalla funzione esterna è unico, ossia il suo indirizzo coincide con la struttura (o classe) stessa, e dunque o coincide con la parte iniziale dell'area, allora potranno essere utilizzate le consuete funzioni di dereferenziazione (Byte@(), Int@(), etc). Se invece I valori passati dalla funzione esterna sono più di uno, essi occuperanno in modo coerente con il tipo di valore, rappresentato da ciascuno, l'area di memoria da noi riservata e puntata dalla variabile puntatore, e andranno dereferenziati mediante l'uso dei Memory-Stream.
Public Sub Button1_Click()
Dim p As Pointer
Dim ms As Stream
Dim by As Byte
' Ci riserviamo un'area sufficiente di memoria:
p = alloc(quantità_di memoria_da_allocare)
' Passiamo alla funzione esterna il puntatore all'area allocata:
funzione_esterna(p As Pointer)
' Andiamo a dereferenziare il pointer:
ms = Memory p For Read
' Andiamo a leggere e mostrare in console i dati:
While Not Eof(ms)
Read #pS, by
Print by
Wend
End