Passare un array bidimensionale da MQL4 a dll

 

Ho bisogno di controllare lo stato degli array nel mio Expert Advisor. Per questo, voglio creare una DLL in C++ che riceva array bidimensionali da MQL4 e mostri il loro stato in una finestra pop-up.

Per quanto ho capito, ho bisogno di passare un array bidimensionale da MQL4 alla dll, ma come passare un array bidimensionale, se la sua dimensionalità nella prima dimensione è sconosciuta e cambia nella funzione in MQL4.

 
 

Sono nuovo della programmazione, per favore aiutatemi a capire. Per esempio, c'è un array in MQL4

massa doppia[][6]

1. Come passarlo in dll in C++?

2. Come visualizzarlo in una finestra popup in C++?

 

Quando si scolpisce un dll funzionante e non ridondante, varie seccature sono troppe, quindi :

-> 1. riorganizzare il problema in modo che debbano essere passati solo array monodimensionali (modo "bag-of-tags");

-> 2. L'idea di base della dll è che è una libreria di funzioni, cioè esattamente un modulo _calcolante_, quindi evitate a tutti i costi di usare elementi grafici/finestra qui;

-> 3. ( un tale punto si formerà presto ) : quando si passano delle stringhe, il minor mal di testa è quando sono stringhe ansi, cioè per Unicode con le sue sottospecie - vedi punto 1. 1, precedentemente convertito in char, cioè byte, usando mql;

-> 4. (Se la vostra dll usa oggetti per i calcoli, è meglio avvolgerli in uno, ottenere il suo handle all'inizializzazione, passarlo a mql-program e poi chiamare i metodi, riferendosi all'oggetto wrapper con questo handle.

 

Penso che il modo più semplice per voi di implementare questo sia attraverso un file - scaricate il tacchino, caricate il modulo C++ e cancellatelo, e così via.

 
Non ci sono array multidimensionali in MQL4. Trasmettilo come monodimensionale, l'importante è calcolare la dimensione e trasmetterla correttamente.
 

TheXpert:
В MQL4 нет многомерных массивов. Передавайте как одномерный, главное правильно размер высчитать и передать.

Cioè se array[10][6] allora la sua dimensione è unidimensionale 60?

 
Barbarian:
Sì.
 
TheXpert:
Sì.
Cioè in C++, è necessario creare una classe che converta un array unidimensionale in uno bidimensionale?
 
Barbarian:
Quindi, in C++, avete bisogno di creare una classe che converta un array unidimensionale in uno bidimensionale?

Sì, certo.

Di recente ho finito di scrivere un corso del genere. È davvero un array dinamico multidimensionale. Cioè è possibile cambiare il numero di misure al volo senza rompere la struttura dei dati.

E può anche essere inizializzato da un puntatore a un array. Ho sovraccaricato gli operatori. Ho 348 sovraccarichi :-))

Circa lo stesso con gli operatori:

a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.
Ho fatto operazioni matematiche e varie manipolazioni per esso. C'è un reverse per l'indice e molte altre cose con cui devo lavorare.

========================

Lamultidimensionalità dell'array è solo un'interfaccia. Può nascondere un array di array, un array di puntatori ad array, un array di classi contenitore, una classe contenitore, ecc.

Nel nostro caso, solo l'interpretazione di una matrice unidimensionale come una multidimensionale è adatta. Altrimenti, non c'è modo di passarlo da MQL4.

 
Barbarian:
Cioè, in C++, è necessario creare una classe che converta un array unidimensionale in uno bidimensionale?
Non necessariamente. Potete calcolare l'indice. Convertire un array ogni volta è un sacco di lavoro.
Motivazione: