Errori, bug, domande - pagina 2502

 
fxsaber:

Non è ancora riuscito a capirlo.

Non dall'ordine dei campi, ma dal valore massimo e impostato di pack() più dipende dall'ordine dei campi.

Ora ho fatto la seguente variante

struct A pack(16)
{
  short   j;
  double  x;
  int     b;
};

void OnStart()
{
  Print(sizeof(A)); // 24
}

Non si allinea a 16 come specificato in pack(), ma a 8 del doppio massimo.

 
Alexey Viktorov:

Inoltre dipende dalla sequenza dei campi.

controllato, dipende:

struct A pack(16)
{
  double  x;
  short   j;
  int     b;
};
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(sizeof(A)); // 16
  }
//+------------------------------------------------------------------+
Il tuo esempio ha datosizeof(A) = 24
 
fxsaber:

Ecco come è iniziata questa discussione. Si scopre che non è affatto così.

Sì, ho fatto un errore nel descrivere l'algoritmo di allineamento e quindi posso aver causato ancora più confusione.

Quindi,

pack è un meccanismo di compatibilità con le DLL esterne. In particolare, è analogo a c++ #pragma pack e quindi dovrebbe funzionare allo stesso modo.

altri esempi con dimensioni (per il pacchetto 4)

char -> 1

breve -> 2

int -> 4

lungo -> 8

char, short -> 4

char, int -> 8

char, long -> 12 (16 per pack(8))

breve, char -> 4

long, char -> 12

long, char, short -> 12

long, char, char, char -> 12

long, char, int -> 16

long, char, int, char -> 20

studio (e probabilmente dappertutto) ha come impostazione predefinita pack(8)
 
TheXpert:

Grazie, capisco.

 
Alexey Viktorov:

Tutto funziona secondo me. Poiché nel tuo esempio c'è solo un tipo nella struttura, non ha senso allinearlo.

Vi sbagliate, non funziona correttamente. Ha senso. È un bug. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

 

Salve. Potete dirmi se ci sono tasti di scelta rapida per il trading in MT5? Non li ho trovati nel manuale. Se no, c'è un modo per implementarlo? Cioè ho premuto un tasto e si è aperto un ordine, c'è qualcosa di simile?

 
Vict:

Sbagliato, non funziona bene. Ha senso. È un bug. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

Allora, qual è il bug?

struct A pack(4)
{
  short j;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 4
   return;
}

Si dichiara un array di due elementi con due byte ciascuno e si ottengono 4 byte come dovrebbe essere. Dov'è l'insetto? Cosa?

Questo.

struct A pack(4)
{
  short j;
  int   b;
};

void OnStart()
{
   A q[2];
   Print(sizeof(q)); // 16
   return;
}

L'array è allineato a 4 e 2 elementi prenderanno 2*8 byte.

 
astronom55:

Salve. Potete dirmi se ci sono tasti di scelta rapida per il trading in MT5? Non li ho trovati nel manuale. Se no, c'è un modo per implementarlo? Cioè, ho premuto un tasto e si è aperto un ordine, c'è qualcosa di simile?

Il gatto ha calpestato la tastiera e ha scambiato per te?

Fallo da solo - non è difficile.

 
astronom55:

Salve. Potete dirmi se ci sono tasti di scelta rapida per il trading in MT5? Non li ho trovati nel manuale. Se no, c'è un modo per implementarlo? Cioè, ho premuto un tasto e si è aperto un ordine, c'è qualcosa di simile?

Aiuto del terminale:Tasti di scelta rapida - Utenti avanzati - Guida introduttiva


Se hai bisogno di agire "Basta cliccare una volta e si apre una posizione" - allora una combinazione di tasti dovrebbe essere assegnata a uno script o a un Expert Advisor nel terminale (lo script o l'Expert Advisor dovrebbe essere scaricato, scritto o ordinato).

Горячие клавиши - Для продвинутых пользователей - MetaTrader 5
Горячие клавиши - Для продвинутых пользователей - MetaTrader 5
  • www.metatrader5.com
Горячие клавиши — это клавиши и их комбинации, которые позволяют быстро выполнять различные команды без обращения к меню и панелям управления. Существует возможность назначать горячие клавиши для вызова любого элемента окна "Навигатор", за исключением элементов группы "Счета". Чтобы назначить сочетание клавиш элементу, выполните команду...
 
Artyom Trishkin:

Il gatto è salito sulla tastiera e ha fatto uno scambio per te?

Fallo da solo - non è difficile.

Non ho idea di come fare. Non sono riuscito a trovare uno script del genere.