Übergabe eines zweidimensionalen Arrays von MQL4 an dll - Seite 3

 
TheXpert:
In MQL4 gibt es keine mehrdimensionalen Arrays. Die Hauptsache ist, dass die Größe korrekt berechnet und übermittelt wird.

int ArrayResize( object&array[], int new_size)
Legt die neue Größe in der ersten Dimension des Arrays fest. Bei erfolgreicher Ausführung gibt die Funktion die Anzahl aller im Array enthaltenen Elemente nach der Größenänderung zurück, andernfalls gibt sie -1 zurück und das Array wird nicht verkleinert.
Hinweis: Ein lokal in einer Funktion deklariertes Array, dessen Größe geändert wurde, bleibt nach Abschluss der Funktion unverändert. Wenn die Funktion erneut aufgerufen wird, hat ein solches Array eine andere Größe als das deklarierte Array.
Parameter:
array[] - Array zur Größenänderung.
neue_Größe - Neue Größe für die erste Dimension.
Beispiel:
double array1[][4]; int element_count=ArrayResize(array1, 20); // neue Größe - 80 Elemente


Dies ist ein Zitat aus der Hilfe und eine gleichzeitige Antwort auf den Autor des Beitrags über alle Arrays in MQL, die eindimensional sind.

 
Debugger:

Dies ist ein Zitat aus der Hilfe und eine gleichzeitige Antwort an den Autor des Beitrags darüber, dass alle Arrays in MQL eindimensional sind.

Dies ist eine Funktion, die auf einem eindimensionalen Array aufbaut. Versuchen Sie, das Gegenteil zu beweisen.
 
Warum das Rad neu erfinden und versuchen, klüger zu erscheinen als die C++-Entwickler?
 
Debugger:
Warum das Rad neu erfinden und versuchen, klüger zu erscheinen als die C++-Entwickler?

Das, was wir denken, und das, was tatsächlich da ist, sind oft VERSCHIEDENE Dinge, und noch mehr, wenn wir versuchen, für andere zu denken!

Glauben Sie wirklich, dass Vadim nichts Besseres zu tun hat, als "schlauer zu sein als die Entwickler"? Kennen Sie den Mann so gut, um so zu fantasieren?! Ich hätte Angst, in einer derartig verzerrten Welt zu leben... :)))

Und wenn jemand etwas ändert/verändert/umgestaltet, das zuvor von jemand anderem geschaffen wurde, dann ist das sein Recht! Es ist NORMAL, die Welt für sich selbst zu verändern, obwohl es gegen das akzeptierte "sich der sich verändernden Welt beugen" ist... ;)

 

Ich frage mich, wo ein solches "Fahrrad" liegt? :-))

Bevor ich geschrieben habe, habe ich alles durchforstet. Nicht einmal im Boost. Ganz zu schweigen von C++, das nichts damit zu tun hat, und auch in STL gibt es so etwas nicht.

Übrigens gibt es keine vollständige Lösung für dieses Problem. Ich werde nicht ins Detail gehen, aber die Möglichkeiten von C++ sind nicht ausreichend, um dieses Problem zu lösen.

Ich habe mich über Windgrad informiert. Es gibt dort einige gute Programmierer. Sobald sie die Aufgabe gelernt hatten, sagten sie sofort einige spezifische Probleme voraus. Natürlich habe ich sie fast alle gelöst. Es blieben prinzipiell unlösbare Fragen. Dies sind Probleme im Zusammenhang mit der Handhabung von Array-Inhalten durch die Indexierungsoperatoren "[]". Keiner im Internet weiß, wie das geht. Ich habe eine Krücke gemacht. Jetzt können wir fast vollständig mit "[]"-Operatoren arbeiten, aber wir müssen der letzten Dimension einen bestimmten Index-Typ zuweisen (was wir leicht vergessen können, ohne dass der Compiler uns davor warnt). Dann funktioniert es wie ein gewöhnliches mehrdimensionales Array mit Indexierung durch []. Das heißt, der Operator wird 4 Mal mit einem anderen Indextyp überladen. Eine Überladung liefert den Zellinhalt nach der letzten linearen Indexberechnung durch die vorherigen []-Operatoren. Die anderen Überladungen geben ein Objekt zurück, so dass der []-Operator erneut verwendet werden kann. In einigen Fällen wird ein Typ-Cast-Operator ausgelöst, der den Inhalt der Zelle zurückgibt, auf die zuletzt zugegriffen wurde. In manchen Fällen funktioniert das nicht. Es kann einige Probleme geben, von denen Sie erst erfahren, wenn das Programm nicht richtig funktioniert. In einigen Fällen hilft der Compiler. In anderen Fällen sind es die Ausnahmen, die für mögliche Benutzerfehler vorgesehen sind. Ich habe versucht, für alle Fälle vorzusorgen.

Die Hauptprobleme sind die folgenden:

a[0][1][2] = a[0][1][3] + a[0][5][2] / a[0][8][12]; // Здесь на всякий случай надо в последнем измерении использовать тип _SIZE_T. Для логических операций тоже надо.

Es gibt die Methode at(). Er ersetzt die Operatoren "[]" vollständig und umfassend.

Die Klasse ist durch einen kritischen Abschnitt geschützt, um in Multithreading-Anwendungen zu funktionieren.

 
Zhunko:

Nein, das kann ich nicht verstehen, ich kann es nicht lautlos lesen.

Du bist ein toller Radfahrer. Die einfachste Implementierung wurde vor nicht allzu langer Zeit in mql5 (!) mit einer Zeilengröße von 100 Zeilen veröffentlicht.

 
TheXpert:

Nein, das kann ich nicht verstehen, ich kann es nicht lautlos lesen.

Du bist ein toller Radfahrer. Die einfachste Implementierung wurde vor nicht allzu langer Zeit in mql5 (!) mit einer Zeilengröße von 100 Zeilen veröffentlicht.

Da draußen ist alles voller Müll.
 
Zhunko:
Das ist Blödsinn.

Oh ja, kein Blödsinn nur vom großen Guru Vadim, knie vor seinem Antlitz.

Igitt... Underachiever haben das größte Ego. Sie haben gelernt, msdn und die Hilfe zu benutzen, sie haben über 1000 Zeilen Text geschrieben und das war's, ich bin ein Star. Ich habe irgendwo das Wort Singleton und XP gehört, das war's, ich kenne Programmiermuster und Methoden. Ich bin ein verdammter Designer...

Du solltest dich schämen, du bist kein Junge.

 
Vadim! Sind Sie daran interessiert, Ihre Zeit mit DIESER Argumentation ("Sie sind selbst ein Narr")von Leuten zu vergeuden, diesich "selbst zerstören"?
 
TheXpert:

Oh ja, kein Blödsinn nur vom großen Guru Vadim, knie vor seinem Antlitz.

Igitt... Underachiever haben das größte Ego. Sie haben gelernt, msdn und die Hilfe zu benutzen, sie haben über 1000 Zeilen Text geschrieben und das war's, ich bin ein Star. Ich habe irgendwo das Wort Singleton und XP gehört, das war's, ich kenne Programmiermuster und Methoden. Ich bin ein verdammter Designer...

Du solltest dich schämen, du bist kein Junge.


Andrew, warum hast du mir nicht gezeigt, was für ein Superprogrammierer du bist? Der erste Schritt besteht darin, zu erklären, wie Sie das Problem gelöst haben. Ich habe geschrieben, wie ich das Problem gelöst habe. Und jetzt sagen Sie es mir. Dann gehen wir gemeinsam Ihren Missverständnissen auf den Grund.

Noch einmal: Ich bin kein Programmierer. Ich bin besser als das.

===========

Übrigens, ich habe keine Projekte mit weniger als 1000 Zeilen. In der Regel ein Dutzend Mal mehr. Diese Klasse (Basis) umfasst 5110 Zeilen + 2 2500 Zeilen für jede der von ihr geerbten Klassen. Ganz zu schweigen von einem Dutzend ähnlicher Geräte, die für das Projekt verwendet wurden.