Übergabe eines zweidimensionalen Arrays von MQL4 an dll

 

Ich muss den Zustand von Arrays in meinem Expert Advisor kontrollieren. Dazu möchte ich eine Dll in C++ erstellen, die zweidimensionale Arrays von MQL4 empfängt und deren Zustand in einem Popup-Fenster ausgibt.

Soweit ich verstehe, muss ich ein zweidimensionales Array von MQL4 an die DLL übergeben, aber wie man ein zweidimensionales Array übergeben, wenn seine Dimensionalität in der ersten Dimension unbekannt ist und in der Funktion in MQL4 ändert.

 
Erstellen Sie ein dynamisches Array.
 

Ich bin neu in der Programmierung, bitte helfen Sie mir zu verstehen. Zum Beispiel gibt es in MQL4 ein Array

double mass[][6]

1. Wie man es in dll in C++ übergeben?

2. Wie kann man sie in einem Popup-Fenster in C++ anzeigen?

 

Bei der Erstellung einer funktionierenden und nicht redundanten DLL sind verschiedene Probleme zu viel, also :

-> 1. das Problem so umgestalten, dass nur eindimensionale Arrays übergeben werden müssen ("bag-of-tags"-Verfahren);

-> 2. die Grundidee der dll ist, dass es sich um eine Funktionsbibliothek handelt, d.h. genau genommen um ein _Rechenmodul_, also vermeiden Sie es auf jeden Fall, hier irgendwelche Grafik-/Fensterelemente zu verwenden;

-> 3. ( ein solcher Punkt wird sich bald bilden ) : bei der Übergabe von Strings bereitet es am wenigsten Kopfzerbrechen, wenn es sich um ansi-strings handelt, d.h. für Unicode mit seinen Unterarten - siehe Punkt 1. 1, die zuvor mit mql in char, d. h. Bytes, umgewandelt wurden;

-> 4. (Wenn Ihre DLL Objekte für Berechnungen verwendet, ist es besser, sie in ein Objekt zu verpacken, dessen Handle bei der Initialisierung zu erhalten, es an mql-program zu übergeben und dann Methoden aufzurufen, die sich auf das Wrapper-Objekt durch dieses Handle beziehen.

 

Ich denke, der einfachste Weg für Sie, dies zu implementieren, ist über eine Datei - entladen Sie den Truthahn, laden Sie das C++-Modul und löschen Sie es, und so weiter.

 
In MQL4 gibt es keine mehrdimensionalen Arrays. Das Wichtigste ist, die Größe zu berechnen und korrekt zu übermitteln.
 

TheXpert:
В MQL4 нет многомерных массивов. Передавайте как одномерный, главное правильно размер высчитать и передать.

D.h. wenn array[10][6] dann ist seine Größe eindimensional 60?

 
Barbarian:
Ja.
 
TheXpert:
Ja.
d.h. Sie müssen in C++ eine Klasse erstellen, die ein eindimensionales Array in ein zweidimensionales Array zurückverwandelt?
 
Barbarian:
Sie müssen also in C++ eine Klasse erstellen, die ein eindimensionales Array in ein zweidimensionales zurückverwandelt?

Ja, sicher.

Ich habe vor kurzem einen solchen Kurs geschrieben. Es handelt sich wirklich um ein mehrdimensionales dynamisches Array. D.h. es ist möglich, die Anzahl der Messungen im laufenden Betrieb zu ändern, ohne die Datenstruktur zu zerstören.

Es kann auch durch einen Zeiger auf ein Array initialisiert werden. Ich habe die Betreiber überlastet. Ich habe 348 Überlastungen :-))

Ungefähr dasselbe gilt für die Betreiber:

a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.
Ich habe dafür mathematische Operationen und verschiedene Manipulationen durchgeführt. Es gibt eine Rückseite für den Index und viele andere Dinge, mit denen ich arbeiten muss.

========================

Die Mehrdimensionalität des Arrays ist nur eine Schnittstelle. Sie kann ein Array von Arrays, ein Array von Zeigern auf Arrays, ein Array von Containerklassen, eine Containerklasse usw. verbergen.

In unserem Fall ist nur die Interpretation eines eindimensionalen Feldes als mehrdimensionales Feld geeignet. Andernfalls gibt es keine Möglichkeit, sie von MQL4 aus zu übergeben.

 
Barbarian:
Müssen Sie also in C++ eine Klasse erstellen, die ein eindimensionales Array in ein zweidimensionales Array zurückverwandelt?
Nicht unbedingt. Sie können den Index berechnen. Ein Array jedes Mal umzuwandeln ist eine Menge Arbeit.