Discussione sull’articolo "Sbarazzarsi delle DLL auto-prodotte"

 

Il nuovo articolo Sbarazzarsi delle DLL auto-prodotte è stato pubblicato:

Se la funzionalità del linguaggio MQL5 non è sufficiente per svolgere le attività, un programmatore MQL5 deve utilizzare strumenti aggiuntivi. Deve passare a un altro linguaggio di programmazione e creare una DLL intermedia. MQL5 ha la possibilità di presentare vari tipi di dati e trasferirli all'API ma, purtroppo, MQL5 non può risolvere il problema relativo all'estrazione dei dati dal puntatore accettato. In questo articolo punteremo tutte le "i" e mostreremo semplici meccanismi di scambio e lavoro con tipi di dati complessi.

Come forse saprai, qualsiasi variabile (comprese le variabili di tipi di dati complessi) ha il suo indirizzo specifico, dal quale tale variabile viene archiviata in memoria. Questo indirizzo è un valore intero di quattro byte (di tipo int) uguale all'indirizzo del primo byte di questa variabile.

E se tutto è ben definito, è possibile lavorare con quest'area di memoria. La libreria del linguaggio C (msvcrt.dll) contiene la funzione memcpy. Il suo scopo è l'elemento mancante, che lega MQL5 e varie librerie API e offre grandi possibilità per un programmatore.


Passiamo alla conoscenza dei nostri antenati

La funzione Memcpy copia il numero specificato di byte da un buffer a un altro e restituisce il puntatore a un buffer del ricevitore.

void *memcpy(void *dst, const void *src, int cnt);
dst - pointer to the receiver buffer
src - pointer to the source buffer
cnt - number of bytes for copying

In altre parole, un'area di memoria con una dimensione di cnt byte a partire dall'indirizzo src viene copiata nell'area di memoria a partire dall'indirizzo dst.

I dati che si trovano all'indirizzo src possono essere di vario tipo. Questo può essere una variabile di byte char, doppio numero di otto byte, array, qualsiasi struttura e qualsiasi volume di memoria. Significa che puoi trasmettere liberamente i dati da un'area all'altra, se conosci indirizzi e dimensioni.


Come funziona

Il diagramma 1 mostra le dimensioni comparative di alcuni tipi di dati.

Dimensioni di vari tipi di dati in MQL5


La funzione Memcpy è necessaria per copiare i dati da un'area di memoria all'altra.
La figura 2 mostra la copia di quattro byte.

Esempio di copia di 4 byte con l'utilizzo di memcpy

Autore: ---