Riferimenti alle matrici

 

Motivo:

Il punto è che molto spesso nei tacchini avete bisogno di accedere alle serie temporali, che vengono passate a OnCalculate.

L'annidamento di queste funzioni può essere abbastanza significativo, e dobbiamo trascinare questo array da OnCalculate in tutta la catena di chiamate come parametro.

Mentre in una parte significativa della catena questo array non è necessario nell'inferno.

Cosa vogliamo:

Una parvenza di riferimento ad un array, come questo:

class TimeReference
{
//
   datetime Time[];
};

TimeReference TimeRef;

datetime F()
{
   return TimeRef.Time[0];
}

int OnCalculate(const int bars,
                const int counted,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& sprd[])
{
   TimeRef.Assign(time);
   F();
}

MA. Condizione obbligatoria - non ci dovrebbe essere nessuna copia di array.

A prima vista, questo può sembrare irrealizzabile. Ma ho il sospetto che si possa fare.

Cosa ne pensate, signori?

 

MQL non punta esplicitamente alla memoria.

Ma potete ottenerlo con memcpy, che restituisce ciò di cui avete bisogno.

Poi potete trascinare quel valore dove volete e usare memcpy allo stesso modo.

controlla il mio articolo sulle DLL

 
sergeev:
Come posso reinserire questo puntatore?
 
Lo stesso memcpy, a cui viene passato il puntatore.
 
sergeev:
con memcpy, dove viene passato il puntatore.

No, possono prendere il puntatore ma non lo slip.

___________

OK, quindi è probabilmente impossibile farlo correttamente.

 
TheXpert:
No, possono prendere il puntatore ma non farlo scivolare.

e infilarlo, testato.

 
sergeev:

e infilarlo, testato.

Fammi un esempio.
 
TheXpert:
Mostrami un esempio.

Beh, è nell'articolo, no?

Sto cercando di inserire il codice e il server si blocca.

 
sergeev:

Beh, è nell'articolo, no?

Non è nell'articolo. C'è solo la copia della memoria da una matrice a una matrice già preparata.
 
https://www.mql5.com/ru/articles/364#3

primo esempio

viene passato int Source - essenzialmente un indirizzo di memoria

e copiato nell'array char Dest[10]

Избавляемся от балласта самодельных DLL
Избавляемся от балласта самодельных DLL
  • 2012.01.31
  • o_O
  • www.mql5.com
Если MQL5-программисту недостаточно функционала языка, он вынужден обращаться к дополнительным инструментам. Для этого приходится использовать другой язык программирования и создавать промежуточную DLL. В MQL5 имеется механизм представления разных типов данных с помощью структур и передачи их в API, но к сожалению, MQL5 не отвечает нам на вопрос о том, как вытянуть данные из принятого указателя. В данной статье мы поставим точку в этом вопросе и покажем простые механизмы обмена сложными типами данных и работе с ними.
 

Hai capito bene? Stai sovraccaricando memcpy per tutti i tipi ora?

Basta non dimenticare che la dimensione dell'indirizzo è lunga per 64 bit.

--------------

Suggerimento numero uno: pensate che dovremmo chiedere agli sviluppatori di fare una funzione nativa come long ArrayGetAddress( object array) ?

Se non lo faranno, suggerimento due: dovremmo spingere #ifdef. Renat ha promesso di implementarlo.

Motivazione: