Referencias de matrices

 

El motivo:

La cuestión es que muy a menudo en los pavos se necesita acceso a las series de tiempo, que se pasan a OnCalculate.

El anidamiento de estas funciones puede ser bastante significativo, y tenemos que arrastrar este array desde OnCalculate a lo largo de la cadena de llamadas como un parámetro.

Mientras que en una parte importante de la cadena esta matriz no es necesaria en el infierno.

Lo que queremos:

Algún tipo de referencia a un array, como este:

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();
}

PERO. Condición obligatoria: no debe haber copia de matrices.

A primera vista, esto puede parecer irrealizable. Pero sospecho que se puede hacer.

¿Qué les parece, señores?

 

MQL no apunta explícitamente a la memoria.

Pero puedes conseguirlo con memcpy. te devuelve lo que necesitas.

Luego puedes arrastrar ese valor a donde quieras. y usar memcpy para lo mismo.

consulte mi artículo sobre las DLL

 
sergeev:
¿Cómo vuelvo a meter este puntero?
 
El mismo memcpy, que es donde se pasa el puntero.
 
sergeev:
con memcpy. Ahí es donde se pasa el puntero.

No, pueden coger el puntero pero no el resbalón.

___________

Vale, probablemente sea imposible hacerlo bien.

 
TheXpert:
No, pueden coger el puntero pero no deslizarlo.

y deslizarlo, probado.

 
sergeev:

y deslizarlo, probado.

Dame un ejemplo.
 
TheXpert:
Muéstrame un ejemplo.

Bueno, está en el artículo, ¿no?

Intento insertar el código y el servidor se congela.

 
sergeev:

Bueno, está en el artículo, ¿no?

No está en el artículo. Sólo hay copia de memoria de un array a un array preparado previamente.
 
https://www.mql5.com/ru/articles/364#3

primer ejemplo

int Se pasa la fuente - esencialmente una dirección de memoria

y copiado en el array char Dest[10]

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

¿lo has hecho bien? ¿estás sobrecargando memcpy para todos los tipos ahora?

No olvides que el tamaño de la dirección es largo para 64 bits.

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

Sugerencia número uno: ¿crees que deberíamos pedir a los desarrolladores que hagan una función nativa como long ArrayGetAddress( object array) ?

Si no lo hacen, segunda sugerencia: deberíamos impulsar #ifdef. Renat prometió implementarlo.

Razón de la queja: