Riferimenti alle matrici - pagina 3

 

Porca miseria, le dimensioni di questa struttura...

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

60 byte ) ma è una follia. Sono 52 byte da decifrare.

Se siete interessati, ecco il codice iniziale per scavare

#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[];
Non sto capendo il senso di questo parametro...
 
sergeev:
Non sto capendo il senso di questo parametro...

Come ottenere l'indirizzo del primo elemento dell'array:

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


non funziona?

 
MetaDriver:

Che ne dite di ottenere l'indirizzo del primo elemento di un array:

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


non funziona?

funziona naturalmente.

ma ancora non capisco perché

ArrayStore::double x[];
 
sergeev:

Funziona, ovviamente.

Ma ancora non capisco perché

Non lo capisco nemmeno io. :)
 
MetaDriver:
Non lo capisco nemmeno io. :)

Andiamo.

Ripeterò di nuovo il compito. Con il tempo O(1) relativo alla dimensione della serie temporale fai un riferimento ad essa. Cioè, la copia dell'array è vietata a priori.

L'unico modo è recuperare la struttura dell'array. Quindi, forzando il puntatore alla serie temporale invece del puntatore all'array, insieme ad alcuni parametri, per far sì che la struttura pensi che sia ok.

Ladimensione della struttura dell'array è di 52 byte, 8 dei quali (presumibilmente) è effettivamente un puntatore, il resto sono impostazioni, come dimensioni, riserve, proprietà AsSeries, ecc. (Win7x64)

Ora il compito è quello di spacchettare la struttura e imparare a infilare dati adeguati.

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

funziona, ovviamente.

Funziona naturalmente, ma in questo modo otteniamo un puntatore ai dati, non possiamo sostituire il puntatore, possiamo solo sostituire i dati, quindi ... dobbiamo andare più a fondo (c)
 

O questo o non capisco cosa sia necessario.

Nel primo post hai posto il problema:

Una specie di riferimento di array, come questo:

Vi ho mostrato che memcpy ottiene con successo un puntatore all'array.

Poi usate lo stesso memcpy e ottenete i dati.


Allora, di cosa avete davvero bisogno? Perché state costruendo una specie di struttura qui? Cosa ha a che fare con un puntatore a un array?

 
sergeev:

Poi usate memcpy e recuperate i dati.

Lentamente. Tutte le funzioni dll sono chiamate tramite un wrapper.

Ho bisogno di un array normale senza copiare.

Date un'occhiata al primo post. Ha un codice molto preciso che dice esattamente quello che voglio.

 
TheXpert:

Lentamente. Tutte le funzioni dll sono chiamate tramite un wrapper.

Ho bisogno di un array normale senza copiare.

Guarda il primo post. C'è un codice molto preciso che dice esattamente quello che voglio.

È semplice:) Fai una serie temporale completa in Quartet (la tua è la nona) e la chiave d'oro è nella tua tasca:)

Ti daranno uno schiaffo, imho. Non si può hackerare la mucca sacra.