Referencias de matrices - página 3

 

Mierda... el tamaño de esta estructura...

struct ArrayStore
{
   long reserved;
   double x[];
};

60 bytes ) pero eso es una locura. Son 52 bytes para descifrar.

Si te interesa, aquí tienes el código inicial para excavar

#import "msvcrt.dll"
  long memcpy(long &dst, long &src, int cnt);
  long memcpy(uchar &dst[], long &src, int cnt);
#import

struct ArrayStore
{
   long reserved;
   double x[];
};

#define N 60
// sizeof(ArrayStore) == 60

void OnStart()
{
   ArrayStore store;
   ArrayResize(store.x, 0x11, 0x22);
   store.reserved = 0xFF;
   
   uchar array[N];
   ArrayInitialize(array, 0);
   
   memcpy(array, store.reserved, N);
   
   string s;
   for (int i = 0; i < N; i++)
   {
      s = s + " " + StringFormat("%.2X", array[i]);
   }
   Print(s);
}
 
ArrayStore::double x[];
No entiendo la esencia de este parámetro...
 
sergeev:
No estoy entendiendo la esencia de este parámetro...

¿Qué tal si se obtiene la dirección del primer elemento del array?

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


no funciona?

 
MetaDriver:

¿Qué pasa con la obtención de la dirección del primer elemento de un array?

long ArrPtr = memcpy(Arr[0], Arr[0], 1);


no funciona?

funciona, por supuesto.

pero sigo sin entender por qué

ArrayStore::double x[];
 
sergeev:

Funciona, por supuesto.

Pero sigo sin entender por qué

Yo tampoco lo entiendo. :)
 
MetaDriver:
Yo tampoco lo entiendo. :)

Vamos.

Voy a repetir la tarea de nuevo. Con el tiempo O(1) relativo al tamaño de la serie temporal hacer una referencia a ella. Es decir, la copia de la matriz está prohibida a priori.

La única manera es recuperar la estructura del array. Por lo tanto, forzar el puntero de la serie de tiempo en lugar de puntero de la matriz, junto con algunos parámetros, para hacer que la estructura de pensar que está bien.

El tamaño de la estructura del array es de 52 bytes, 8 de los cuales (presumiblemente) son realmente un puntero, el resto son ajustes, como el tamaño, las reservas, las propiedades de AsSeries, etc. (Win7x64)

Ahora la tarea consiste en desempaquetar la estructura y aprender a deslizar los datos adecuados.

Документация по MQL5: Основы языка / Операции и выражения / Другие операции
Документация по MQL5: Основы языка / Операции и выражения / Другие операции
  • www.mql5.com
Основы языка / Операции и выражения / Другие операции - Документация по MQL5
 
sergeev:

funciona, por supuesto.

Funciona, por supuesto, pero de esta manera obtenemos un pun tero a los datos, no podemos reemplazar el puntero, sólo podemos reemplazar los datos, así que ... tenemos que profundizar (c)
 

O eso o no entiendo lo que se necesita.

En el primer post, has planteado el problema:

Algún tipo de referencia de matriz, como esta:

Te mostré que memcpy obtiene con éxito un puntero al array.

Luego usa el mismo memcpy y obtén los datos.


Entonces, ¿qué es lo que realmente necesitas? ¿Por qué estás construyendo algún tipo de estructura aquí? ¿Qué tiene que ver con un puntero a un array?

 
sergeev:

Luego usa memcpy y recupera los datos.

Despacio. Todas las funciones dll se llaman a través de un wrapper.

Necesito un array normal sin copiar.

Echa un vistazo al primer puesto. Tiene un código muy preciso que dice exactamente lo que quiero.

 
TheXpert:

Despacio. Todas las funciones dll se llaman a través de un wrapper.

Necesito un array normal sin copiar.

Mira el primer puesto. Hay un código muy preciso que dice exactamente lo que quiero.

Es sencillo:) Haz una serie temporal completa en Quartet (la tuya es la novena) y la llave de oro está en tu bolsillo:)

Te darán un tirón de orejas, imho. No se puede piratear la vaca sagrada.