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