sì, abbiamo già capito che pack() non funziona in MQL - non ho altre opzioni per controllarepack()
Ho pensato di controllare in .dll in C# ma c'è un problema anche lì - MQL vede la firma della funzione chiamata (ricordate la chiamata const nelle firme non ha funzionato per C# )
e quando si trasferiscono i dati in C# sarà possibile fare la conversione dei tipi?
ZS: al massimo, scrivi una .dll in C++ - puoi ricevere / inviare dati "puliti" lì
Grazie, l'ho trovato. Tutto funziona secondo me. Poiché nel tuo esempio c'è solo un tipo nella struttura, non ha senso allinearlo. Ecco perché dà solo la dimensione del tipo. E qui avete
struct A pack(4)
{
short j;
int z;
};
voidOnStart()
{
Print(sizeof(A)); // 8
}
Ecco la struttura
struct A pack(8)
{
short j;
double x;
int b;
};
voidOnStart()
{
Print(sizeof(A)); // 24
}
La documentazione lo spiega molto chiaramente in immagini.
Grazie, l'ho trovato. Tutto funziona secondo me. Poiché nel tuo esempio c'è solo un tipo nella struttura, non ha senso allinearlo. Ecco perché dà solo la dimensione del tipo. E qui abbiamo
E questa struttura
La documentazione lo spiega molto chiaramente in immagini.
Il campo massimo è di 8 byte, impostate l'allineamento a 4 e ottenete 16. Quindi 2+2|4|2+2|2+addshortdoubleint
Oppure 2+addizione|4|4|4
Sì, probabilmente dovrebbe suonare bene:
in sintesi: pack() esegue l'allineamento elemento per elemento dei dati nella struttura; ogni elemento sarà aggiunto con un valore multiplo di pack() tenendo conto della dimensione massima di() dell'elemento della struttura (non più del valore massimo, meno può essere in aggiunta)
totale: pack() esegue l'allineamento dei dati nella struttura elemento per elemento, ogni elemento sarà un multiplo di pack() tenendo conto della massima sizeof() dell'elemento della struttura (non più del valore massimo, meno può essere in aggiunta)
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Questo è quello che succede.
ha provato così:
2019.07.07 18:31:02.708 tst (EURUSD,H1) 4294967295 4294967295 4294967295 4294967295
2019.07.07 18:31:02.708 tst (EURUSD,H1) A
2019.07.07 18:31:02.708 tst (EURUSD,H1) 0 4294967295 4294967295 4294967295
2019.07.07 18:31:02.708 tst (EURUSD,H1) B
2019.07.07 18:31:02.708 tst (EURUSD,H1) 0 4294967295 4294967295 4294967295
2019.07.07 18:31:02.708 tst (EURUSD,H1) sizeof(A) = 4 , sizeof(B) = 4
azzeriamo ancora solo i primi 4 byte
ha provato in un altro modo:
ancora nessun risultato - cancella solo i primi 4 byte
ancora nessun risultato - cancella solo i primi 4 byte
Perché fisicamente la struttura è di 4 byte.
Perché fisicamente la struttura è di 4 byte.
sì, abbiamo già capito che pack() non funziona in MQL - non ho altre opzioni per controllarepack()
Ho pensato di controllare in .dll in C# ma c'è un problema anche lì - MQL vede la firma della funzione chiamata (ricordate la chiamata const nelle firme non ha funzionato per C# )
e quando si trasferiscono i dati in C# sarà possibile fare la conversione dei tipi?
ZS: al massimo, scrivi una .dll in C++ - puoi ricevere / inviare dati "puliti" lì
Non ricordo se è nella documentazione.
Grazie, l'ho trovato. Tutto funziona secondo me. Poiché nel tuo esempio c'è solo un tipo nella struttura, non ha senso allinearlo. Ecco perché dà solo la dimensione del tipo. E qui avete
Ecco la struttura
La documentazione lo spiega molto chiaramente in immagini.
Grazie, l'ho trovato. Tutto funziona secondo me. Poiché nel tuo esempio c'è solo un tipo nella struttura, non ha senso allinearlo. Ecco perché dà solo la dimensione del tipo. E qui abbiamo
E questa struttura
La documentazione lo spiega molto chiaramente in immagini.
Sì, è così che funziona:
2019.07.07 19:16:27.100 tst (EURUSD,H1) 4294967295 4294967295 4294967295 4294967295
2019.07.07 19:16:27.100 tst (EURUSD,H1) A
2019.07.07 19:16:27.100 tst (EURUSD,H1) 0 0 0 0 4294967295
2019.07.07 19:16:27.100 tst (EURUSD,H1) B:
2019.07.07 19:16:27.100 tst (EURUSD,H1) 0 0 0 0
2019.07.07 19:16:27.100 tst (EURUSD,H1) sizeof(A) = 12 , sizeof(B) = 16
totale: pack() esegue l'allineamento dei dati nella struttura per la dimensione del campo massimo sizeof() della struttura
sommario: pack() allinea i dati nella struttura per la dimensione del campo massimo sizeof() della struttura
Non esattamente.
Il campo massimo è di 8 byte; impostiamo l'allineamento a 4 e otteniamo 16. Cioè 2+2|4|2+2|2+addshort doubleint
Oppure 2+addizione|4|4|4
Non esattamente.
Il campo massimo è di 8 byte, impostate l'allineamento a 4 e ottenete 16. Quindi 2+2|4|2+2|2+add short doubleint
Oppure 2+addizione|4|4|4
Sì, probabilmente dovrebbe suonare bene:
in sintesi: pack() esegue l'allineamento elemento per elemento dei dati nella struttura; ogni elemento sarà aggiunto con un valore multiplo di pack() tenendo conto della dimensione massima di() dell'elemento della struttura (non più del valore massimo, meno può essere in aggiunta)
pack(4) :
short = 2 + 2 appended = 4=pack(4)
double =8 - non collassare
int =4 - non allineato
sizeof()=16 byte
Sì, probabilmente è così che dovrebbe suonare:
totale: pack() esegue l'allineamento dei dati nella struttura elemento per elemento, ogni elemento sarà un multiplo di pack() tenendo conto della massima sizeof() dell'elemento della struttura (non più del valore massimo, meno può essere in aggiunta)
pack(4) :
short = 2 + 2 appended = 4=pack(4)
double =8 - non collassare
int =4 - non allineato
sizeof()=16 byte
Sembra contorto, ma per me ha senso)).
Sembra contorto, ma ha senso per me.)))
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Bug, bug, domande
fxsaber, 2019.07.07 15:03
L'ordine dei campi influisce sul consumo di memoria e apparentemente sulle prestazioni.
Non sono ancora riuscito a capirlo completamente.