Fehler, Irrtümer, Fragen - Seite 2502

 
fxsaber:

Ich konnte es noch nicht ganz herausfinden.

Nicht aus der Reihenfolge der Felder, sondern aus dem Maximal- und dem Sollwert von pack() sowie aus der Reihenfolge der Felder.

Jetzt habe ich die folgende Variante gemacht

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

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

Er richtet sich nicht an 16 aus, wie in pack() angegeben , sondern an 8 durch das maximale Double.

 
Alexey Viktorov:

Außerdem hängt es von der Reihenfolge der Felder ab.

geprüft, es kommt darauf an:

struct A pack(16)
{
  double  x;
  short   j;
  int     b;
};
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(sizeof(A)); // 16
  }
//+------------------------------------------------------------------+
Ihr Beispiel ergabsizeof(A) = 24
 
fxsaber:

So begann also diese Diskussion. Es hat sich herausgestellt, dass das überhaupt nicht der Fall ist.

Ja, ich habe bei der Beschreibung des Ausrichtungsalgorithmus einen Fehler gemacht und damit möglicherweise noch mehr Verwirrung gestiftet.

Also,

pack ist ein Kompatibilitätsmechanismus mit externen DLLs, der insbesondere analog zu c++ #pragma pack ist und daher auf die gleiche Weise funktionieren sollte.

weitere Beispiele mit Abmessungen (für Pack 4)

Zeichen -> 1

kurz -> 2

int -> 4

lang -> 8

char, short -> 4

char, int -> 8

char, long -> 12 (16 für pack(8))

short, char -> 4

long, char -> 12

long, char, short -> 12

long, char, char, char, char -> 12

long, char, int -> 16

long, char, int, char -> 20

Im Studio (und wahrscheinlich auch überall sonst) wird standardmäßig pack(8) verwendet.
 
TheXpert:

Vielen Dank, ich verstehe.

 
Alexey Viktorov:

Meiner Meinung nach funktioniert alles. Da in Ihrem Beispiel nur ein Typ in der Struktur vorkommt, ist eine Anpassung nicht sinnvoll.

Sie irren sich, es funktioniert nicht richtig. Das ist durchaus sinnvoll. Es ist ein Fehler. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

 

Hallo. Können Sie mir bitte sagen, ob es irgendwelche Hotkeys für den Handel in MT5 gibt? Ich habe sie im Handbuch nicht gefunden. Wenn nicht, gibt es eine Möglichkeit, sie zu implementieren? D.h. ich habe eine Taste gedrückt und ein Auftrag wurde geöffnet, gibt es etwas Ähnliches?

 
Vict:

Falsch, es funktioniert nicht richtig. Das macht Sinn. Es ist ein Fehler. https://www.mql5.com/ru/forum/1111/page2498#comment_12349659

Was ist also der Fehler?

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

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

Sie deklarieren ein Array mit zwei Elementen mit je zwei Bytes und erhalten 4 Bytes, wie es sein sollte. Wo ist die Wanze? Wie?

Dies.

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

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

Das Array ist auf 4 ausgerichtet und 2 Elemente belegen 2*8 Bytes.

 
astronom55:

Hallo. Können Sie mir bitte sagen, ob es irgendwelche Hotkeys für den Handel in MT5 gibt? Ich habe sie im Handbuch nicht gefunden. Wenn nicht, gibt es eine Möglichkeit, sie zu implementieren? D.h. ich habe eine Taste gedrückt und ein Auftrag wurde geöffnet, gibt es etwas Ähnliches?

Ist die Katze auf die Tastatur getreten und hat mit Ihnen getauscht?

Machen Sie es selbst - es ist nicht schwer.

 
astronom55:

Hallo. Können Sie mir bitte sagen, ob es irgendwelche Hotkeys für den Handel in MT5 gibt? Ich habe sie im Handbuch nicht gefunden. Wenn nicht, gibt es eine Möglichkeit, sie zu implementieren? D.h. ich habe eine Taste gedrückt und ein Auftrag wurde geöffnet, gibt es etwas Ähnliches?

Terminal-Hilfe:Hotkeys - Fortgeschrittene Benutzer - Erste Schritte


Wenn Sie Maßnahmen ergreifen müssen, die nach dem Motto "Ein Klick und eine Position wird eröffnet" ablaufen, dann sollte eine Tastenkombination einem Skript oder einem Expert Advisor im Terminal zugewiesen werden (Skript oder Expert Advisor sollten entweder heruntergeladen, geschrieben oder bestellt werden).

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

Ist die Katze auf die Tastatur getreten und hat einen Handel für Sie abgeschlossen?

Machen Sie es selbst - es ist nicht schwer.

Ich habe keine Ahnung, wie man das macht. Ich konnte ein solches Skript nicht finden.