Pasar un array bidimensional de MQL4 a dll

 

Necesito controlar el estado de las matrices en mi Asesor Experto. Para ello, quiero crear una dll en C++ que reciba arrays bidimensionales desde el MQL4 y emita su estado en una ventana emergente.

Por lo que entiendo, necesito pasar un array bidimensional desde MQL4 a la dll, pero como pasar un array bidimensional, si su dimensionalidad en la primera dimensión es desconocida y cambia en la función en MQL4.

 
 

Soy nuevo en la programación, por favor ayúdame a entender. Por ejemplo, hay una matriz en MQL4

doble masa[][6]

1. ¿Cómo pasarla a la dll en C++?

2. ¿Cómo mostrarlo en una ventana emergente en C++?

 

A la hora de esculpir una dll que funcione y no sea redundante, las molestias varias son demasiadas, así que :

-> 1. reordenar el problema para que sólo haya que pasar arrays unidimensionales (modo "bag-of-tags");

-> 2. La idea básica de la dll es que es una librería de funciones, es decir, exactamente un módulo de _cálculo_, por lo que hay que evitar a toda costa el uso de elementos gráficos/ventanas;

-> 3. ( este punto se formará pronto ) : al pasar cadenas, el menor dolor de cabeza es cuando son cadenas ansi, es decir, para Unicode con sus subespecies - véase el punto 1. 1, previamente convertido a char, es decir, a bytes, mediante mql;

-> 4. (Si tu dll usa objetos para los cálculos, es mejor envolverlos en uno, obtener su handle en la inicialización, pasarlo a mql-program y luego llamar a los métodos, refiriéndose al objeto envolvente por este handle.

 

Creo que la forma más fácil de implementar esto es a través de un archivo - descargar el pavo, cargar el módulo de C++ y eliminarlo, y así sucesivamente.

 
No hay matrices multidimensionales en MQL4. Transmitirlo como unidimensional, lo principal es calcular el tamaño y transmitirlo correctamente.
 

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

Es decir, si array[10][6] entonces su tamaño es unidimensional 60?

 
Barbarian:
Sí.
 
TheXpert:
Sí.
es decir, en C++, ¿es necesario crear una clase que convierta una matriz unidimensional en una bidimensional?
 
Barbarian:
Entonces, en C++, ¿es necesario crear una clase que convierta un array unidimensional en uno bidimensional?

Sí, claro.

Hace poco terminé de escribir una clase de este tipo. Realmente es una matriz dinámica multidimensional. Es decir, es posible cambiar el número de mediciones sobre la marcha sin romper la estructura de datos.

Y también puede ser inicializado por un puntero a un array. He sobrecargado a los operadores. Tengo 348 sobrecargas :-))

Aproximadamente lo mismo con los operadores:

a4Arr[1][2][3] += a3Arr[1][0]; // В указанное 4-е измерение массива a4Arr добавляется содержимое 3-го измерения массива a3Arr.
He realizado operaciones matemáticas y diversas manipulaciones para ello. Hay un reverso para el índice y muchas otras cosas con las que tengo que trabajar.

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

Lamultidimensionalidad del array es sólo una interfaz. Puede ocultar un array de arrays, un array de punteros a arrays, un array de clases contenedoras, una clase contenedora, etc.

En nuestro caso, sólo es adecuado interpretar una matriz unidimensional como una multidimensional. De lo contrario, no hay forma de pasarlo desde MQL4.

 
Barbarian:
Es decir, en C++, ¿es necesario crear una clase que convierta una matriz unidimensional en una bidimensional?
No necesariamente. Puedes calcular el índice. Convertir un array cada vez es mucho trabajo.