Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 855

 

Es ist wichtig für mich, eine Antwort auf meine Fragen zu bekommen.

Für CTrade::Buy, CTrade::Sell, CTrade::ClosePosition Methoden

Bedeutet dies, dass Retcode ignoriert werden soll, wenn false zurückgegeben wird?

Bedeutet das, dass Retcode immer mit dem richtigen Wert gefüllt wird, wenn true zurückgegeben wird?

Ich danke Ihnen.

 

Kolleginnen und Kollegen, helfen Sie mir.

Ich versuche, herauszufinden, wie man mit der Registrierung arbeiten, habe ich eine einfache Expert Advisor für den Test gemacht. Das Lesen von Daten aus der Systemregistrierung geht ohne Probleme, aber es gibt Probleme beim Schreiben, MT und Speicherabstürze... (((

Vielleicht ist mein Auge bereits getränkt und ich sehe das Offensichtliche nicht...

Dateien:
TestReg.mq5  25 kb
 
Алексей Барбашин:

Kolleginnen und Kollegen, helfen Sie mir.

Ich versuche, herauszufinden, wie man mit der Registrierung arbeiten, habe ich eine einfache Expert Advisor für den Test gemacht. Das Lesen von Daten aus der Systemregistrierung geht ohne Probleme, aber es gibt Probleme beim Schreiben, MT und Speicherabstürze... (((

Vielleicht ist mein Auge bereits getränkt und ich sehe das Offensichtliche nicht...

Hier sollte es einfach sein. Vor und nach jedem Aufruf der API-Funktion wird etwas ins Protokoll geschrieben. Nach dem Absturz wird in den Protokollen der Ort des Absturzes angegeben.

 
. ... Rick D. ... .:

Es sollte ganz einfach sein. Vor und nach jedem Aufruf der API-Funktion etwas ins Protokoll schreiben. Nach dem Absturz wird aus den Protokollen ersichtlich sein, wo der Absturz stattgefunden hat.

Auf diese Weise hat das Protokoll nicht einmal Zeit, geschrieben zu werden, und das Terminal schließt sich mit einem Fehler. (( Ich nehme an, dass es ein Speicherleck gibt. Dynamische Objekte werden jedoch nicht verwendet (neu). Ich weiß nicht, wie ich damit umgehen soll und suche nach solchen Problemen ;(.

 
Алексей Барбашин:

Das Protokoll hat also nicht einmal Zeit, geschrieben zu werden, das Terminal schließt sich mit einem Fehler. (( Ich nehme an, dass es ein Speicherleck gibt. Dynamische Objekte werden jedoch nicht verwendet (neu). Ich weiß nicht, wie ich damit umgehen soll und wie man solche Probleme erkennt ;(

Ich habe Ihr Beispiel vielleicht ein wenig abgeändert.
Dateien:
TestReg.mq5  26 kb
 
. ... Rick D. ... .:
Ich habe Ihr Beispiel ein wenig abgeändert.

Я ... schockiert, angenehm schockiert. Verteilen Sie Ihre Änderungen auf mehrere Charts gleichzeitig, um ein asynchrones Laden auf registry.... zu gewährleisten. Alles funktioniert reibungslos. Sie haben das Prinzip der Parameterübergabe in der API geändert, d.h. dort, wo Rückgabewerte verwendet werden, haben Sie Arrays mit der Übergabe durch Referenz angewendet, was in mql die Übergabe einer Adresse oder eines Zeigers im Sinne von++ bedeutet. Aber ich hielt diesen Ansatz, der vor 10 Jahren beschrieben wurde, für anachronistisch, da alle einfachen Datentypen in der API ohnehin per Referenz übergeben werden.... Aber anscheinend war es mein Fehler und Kurzsichtigkeit, es bedeutet, dass einfache Typen nicht so schmerzlos an API übergeben werden. Vielen Dank, dass Sie mir den richtigen Weg gezeigt haben! )))

 
Алексей Барбашин:

Я ... schockiert, angenehm schockiert. Verteilen Sie Ihre Änderungen auf mehrere Charts gleichzeitig, um ein asynchrones Laden auf registry.... zu gewährleisten. Alles funktioniert reibungslos. Sie haben das Prinzip der Parameterübergabe in der API geändert, d.h. dort, wo Rückgabewerte verwendet werden, haben Sie Arrays mit der Übergabe per Referenz verwendet, was in mql die Übergabe einer Adresse oder eines Zeigers im Sinne von++ bedeutet. Aber ich hielt diesen vor 10 Jahren beschriebenen Ansatz für anachronistisch, da alle einfachen Datentypen in der API ohnehin per Referenz.... übergeben werden. Aber anscheinend war es mein Fehler und Kurzsichtigkeit, es bedeutet, dass einfache Typen nicht so schmerzlos an API übergeben werden. Vielen Dank, dass Sie mir den richtigen Weg gezeigt haben! )))

Vor einiger Zeit wurde mir unter MT4 beigebracht, Zeiger auf API-Funktionen über eindimensionale Arrays zu übergeben. Wenn sich im Moment etwas geändert hat und jemand dies bestätigen kann, werde ich einen neuen Ansatz wählen.

Aber Sie haben trotzdem die Typen durcheinander gebracht. Vor allem haben die Longs in Windows und in MQL5 unterschiedliche Größen.
Vielleicht finden Sie noch andere Unterschiede.

 
. ... Rick D. ... .:

Früher wurde unter MT4 gelehrt, Zeiger auf API-Funktionen über eindimensionale Arrays zu übergeben. Wenn sich im Moment etwas geändert hat und jemand dies bestätigen kann, werde ich den neuen Ansatz verwenden.

Aber Sie hatten auch einige Verwirrung mit den Typen. Vor allem haben die Longs in Windows und in MQL5 unterschiedliche Größen.
Vielleicht finden Sie noch andere Unterschiede.

Ich habe alle Unterschiede gesehen))) Herzlichen Dank!

Die einzige Frage ist die nach der Größe der in der Registrierung gespeicherten Daten. Laut dem Beispiel aus der Dokumentation (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) können wir etwas mehr Daten speichern als in der korrigierten Datei (ushort buff[1024];). Verstehe ich das richtig?
RegQueryValueEx function (Windows)
  • msdn.microsoft.com
Retrieves the type and data for the specified value name associated with an open registry key. To ensure that any string values (REG_SZ, REG_MULTI_SZ, and REG_EXPAND_SZ) returned are null-terminated, use the RegGetValue function. Syntax Parameters hKey [in] lpValueName [in, optional] The name of the registry value. If lpValueName is NULL or an...
 
Алексей Барбашин:

Ich habe alle Unterschiede gesehen))) Herzlichen Dank!

Die einzige Frage ist die nach der Größe der in der Registrierung gespeicherten Daten. Nach dem Beispiel aus der Dokumentation (https://msdn.microsoft.com/en-us/library/windows/desktop/ms724911(v=vs.85).aspx) können Sie etwas mehr Daten speichern als in der festen Datei (ushort buff[1024];). Lese ich das richtig?
Richtig. Es kann mehr Daten geben. Bei großen Daten ist es richtig, zuerst die Länge abzufragen, dann die Größe des Arrays dynamisch zu ändern und dann alle Daten abzurufen.
 
. ... Rick D. ... .:
Richtig. Es kann mehr Daten geben. Bei großen Datenmengen ist es richtig, zuerst die Länge abzufragen, dann die Größe des Arrays dynamisch zu ändern und dann alle Daten abzurufen.

Hmmm... Wahrscheinlich habe ich mir die API nicht genau angeschaut, aber ich habe eine solche Funktion nicht gesehen.... Und es wäre wahrscheinlich sehr praktisch.

Irgendwelche anderen Tipps... vielleicht ist die Frage zu ... lächerlich ... Wie übersetze ich eine Zahl, z. B. double, in ein Array char? Das heißt, in einigen API ist es erforderlich, Zahlen als Zeiger zu übergeben. Zeiger werden als eindimensionale Arrays übergeben... Bei Zeichenketten ist das klar, dafür gibt es die Funktionen StringToShortArray und StringToCharArray, aber bei Zahlen verstehe ich immer noch nicht, wie man sie in Byte-Arrays (char) umwandelt.