Passer un tableau à deux dimensions de MQL4 à la dll

 

J'ai besoin de contrôler l'état des tableaux dans mon conseiller expert. Pour cela, je veux créer un dll en C++ qui recevrait des tableaux à deux dimensions de MQL4 et afficherait leur état dans une fenêtre pop-up.

D'après ce que j'ai compris, je dois passer un tableau à deux dimensions de MQL4 à la dll, mais comment passer un tableau à deux dimensions, si sa dimensionnalité dans la première dimension est inconnue et change dans la fonction dans MQL4.

 
 

Je suis novice en programmation, aidez-moi à comprendre. Par exemple, il existe un tableau dans MQL4

double masse[][6]

1. Comment le passer dans une dll en C++ ?

2. Comment l'afficher dans une fenêtre popup en C++ ?

 

Lorsqu'il s'agit de sculpter une dll fonctionnelle et non redondante, divers tracas sont de trop, alors :

-> 1. réorganiser le problème de sorte que seuls les tableaux unidimensionnels doivent être transmis (méthode "bag-of-tags") ;

-> 2. l'idée de base de la dll est qu'il s'agit d'une bibliothèque de fonctions, c'est-à-dire exactement un module de _calcul_, donc évitez à tout prix d'utiliser des éléments graphiques/fenêtres ici ;

-> 3. ( un tel point sera bientôt formé ) : lors du passage de chaînes de caractères, le moindre mal de tête est lorsqu'il s'agit de chaînes ansi, c'est-à-dire pour Unicode avec ses sous-espèces - voir point 1. 1, précédemment converti en char, c'est-à-dire en octets, en utilisant mql ;

-> 4. (Si votre dll utilise des objets pour les calculs, il est préférable de les envelopper dans un seul, d'obtenir son handle à l'initialisation, de le passer à mql-program et ensuite d'appeler les méthodes, en se référant à l'objet wrapper par ce handle.

 

Je pense que le moyen le plus simple pour vous de mettre cela en œuvre est de passer par un fichier - décharger la dinde, charger le module C++ et le supprimer, et ainsi de suite.

 
Il n'y a pas de tableaux multidimensionnels dans MQL4. Transmettez-le comme un unidimensionnel, l'essentiel est de calculer la taille et de le transmettre correctement.
 

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

C'est-à-dire que si array[10][6] alors sa taille est unidimensionnelle 60 ?

 
Barbarian:
Oui.
 
TheXpert:
Oui.
Par exemple, en C++, vous devez créer une classe qui reconvertit un tableau unidimensionnel en un tableau bidimensionnel ?
 
Barbarian:
Donc, en C++, vous devez créer une classe qui reconvertira un tableau unidimensionnel en un tableau bidimensionnel ?

Oui. Bien sûr.

J'ai récemment terminé l'écriture d'un tel cours. Il s'agit réellement d'un tableau dynamique multidimensionnel. C'est-à-dire qu'il est possible de changer le nombre de mesures à la volée sans casser la structure des données.

Et il peut aussi être initialisé par un pointeur vers un tableau. J'ai surchargé les opérateurs. J'ai eu 348 surcharges :-))

C'est à peu près la même chose pour les opérateurs :

a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.
J'ai effectué des opérations mathématiques et diverses manipulations pour elle. Il y a un reverse pour l'index et beaucoup d'autres choses avec lesquelles je dois travailler.

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

Lamultidimensionnalité du tableau n'est qu'une interface. Il peut cacher un tableau de tableaux, un tableau de pointeurs vers des tableaux, un tableau de classes de conteneurs, une classe de conteneurs, etc.

Dans notre cas, seule l'interprétation d'un tableau unidimensionnel comme un tableau multidimensionnel convient. Sinon, il n'y a aucun moyen de le passer depuis MQL4.

 
Barbarian:
Par exemple, en C++, faut-il créer une classe qui reconvertit un tableau unidimensionnel en un tableau bidimensionnel ?
Pas nécessairement. Vous pouvez calculer l'indice. Convertir un tableau à chaque fois représente beaucoup de travail.