Añadido soporte nativo para librerías .NET con importación "inteligente" de funciones. Ahora usted puede utilizar las bibliotecas .NET sin escribir envolturas especiales - MetaEditor se encarga de ello.
Para trabajar con las funciones de la biblioteca .NET, basta con importar la propia DLL sin especificar funciones específicas. MetaEditor importa automáticamente todas las funciones con las que es posible trabajar: .
Estructuras simples (POD, plain old data) - estructuras que contienen sólo tipos de datos simples.
Funciones estáticas públicas, en cuyos parámetros sólo se utilizan tipos simples y estructuras POD o sus matrices .
Para llamar a funciones de la biblioteca, basta con importarla: .
#import "TestLib.dll"//+------------------------------------------------------------------+//| Función de inicio del programa de script|//+------------------------------------------------------------------+voidOnStart()
{
int x=41;
TestClass::Inc(x);
Print(x);
}
El código C# de la función Inc de la clase TestClass tiene el siguiente aspecto: .
Se está trabajando en el soporte de las librerías .NET, y se prevén futuras versiones para ampliar su uso.
Se ha añadido a la librería estándar soporte para trabajar con funciones WinAPI. Ahora no es necesario importar manualmente las bibliotecas y describir las firmas de las funciones para utilizar las funciones del sistema operativo en un programa MQL5. Es suficiente con conectar el archivo de cabecera desde el catálogo MQL5\Include/WinAPI.
Las funciones WinAPI están agrupadas en archivos separados por propósito:
.
libloaderapi.mqh - trabajo con recursos
memoryapi.mqh - manejo de memoria
processenv.mqh - trabajo con el entorno
processthreadsapi.mqh - trabajo con procesos
securitybaseapi.mqh - trabajo con el sistema de seguridad del SO
sysinfoapi.mqh - obtener información del sistema
winbase.mqh - funciones generales
windef.mqh - constantes, estructuras y enumeraciones
wingdi.mqh - trabajo con objetos gráficos
winnt.mqh - manejo de excepciones
winreg.mqh - trabajo con el registro
winuser.mqh - gestión de ventanas e interfaces
errhandlingapi.mqh - manejo de errores
fileapi.mqh - manejo de archivos
handleapi.mqh - manejo de handles
winapi.mqh - conexión de todas las funciones (archivos de cabecera WinAPI).
La vinculación sólo funciona con arquitectura de 64 bits.
Теперь вы можете выносить графики финансовых инструментов за пределы окна торгового терминала. Это удобно при работе с несколькими мониторами. Например, на одном можно расположить основное окно платформы и следить за состоянием счета, а на другом — графики для оценки ситуации на рынке. Чтобы отделить график от терминала, отключите опцию...
Nextor Visual Studio 2022, creado un formulario con un botón, ejecutarlo en MetaTrader 5, me sale un error....
En Visual Studio community 2019 todo funciona como el autor, pero cuando escribe:
"Cada formulario tiene una lista pública de elementos que contiene. Recorriendo la lista de elementos, el método encuentra aquellos que el controlador es capaz de soportar y se suscribe a los eventos que necesita. Si un elemento del formulario no es soportado por el controlador, simplemente será ignorado. "
Desgraciadamente, si colocas un SplitContainer o un DataGridView en el formulario de prueba, el formulario no se inicia en absoluto, no se sabe muy bien por qué, pero un componente tan complejo como Chart SE INICIA.
Adjunto un ejemplo de prueba de los componentes que se pueden utilizar para la modificación (¡aunque el formulario se inicia!).
al intentar crear un controlador GuiController controller = new GuiController(assembly, form, m_global_events); da Unexpected exception: The key with this name already exists (for DataGridView) and the controller is NOT created (the form is created, probably it can be shown, but without the controller how to control it?).
Una vez más todo está bien si no hay componentes SplitContainer y/o DataGridView.
"Como puedes ver, el compilador entiende las enumeraciones externas definidas en Net-libraries y sabe cómo trabajar con ellas."
No sé por qué razón, pero el compilador se niega obstinadamente a entender las enumeraciones de C#, así que arrastramos enum de C# a Mql5 y todo funciona.
Sólo que, Vasily, has colocado los botones de compra y venta en el panel de operaciones al revés ))
Pero en general, la cosa más cool ha resultado. ¡Gracias por tu duro trabajo!)
Yo tenía el mismo problema.
Lo resolví un poco diferente - en lugar de ClickOnElement escribí GuiEventType::ClickOnElement. Y después de eso se compila y funciona sin problemas. Pero si este es el caso, realmente no está claro cómo funcionó para Vasily. Quizás hice algo mal...
Pero por lo demás, la cosa es realmente necesaria y útil. Es una pena que MQL5 no tenga algo similar (incorporado).
Resolví este problema un poco diferente - en lugar de ClickOnElement escribí GuiEventType::ClickOnElement. Y después de eso se compila y funciona sin problemas. Pero si este es el caso, es realmente poco claro cómo funcionó para Vasily. Quizás he hecho algo mal...
Pero por lo demás, la cosa es realmente necesaria y útil. Es una pena que MQL5 no tenga algo similar (incorporado).
Tuve un error de este tipo:
@MQL_User, hice como tú: " ...en lugar de ClickOnElement escribí GuiEventType::ClickOnElement" - ¡todo funcionó!
¡Soy relativamente nuevo en MQL5 y he aprendido mucho de este artículo! ¡Muchas gracias!
Tengo una pregunta. He estado luchando un poco durante los últimos 2 días para averiguar esto a continuación.
He completado con éxito cada paso un par de veces, incluso en otro equipo, pero cada vez que intento compilar el código me sale un mensaje de error.
El compilador MQL estados : "Identificador no declarado" para cualquiera de las enumeraciones de abajo.
Si "comentario" estas enumeraciones de MQL5 entonces funciona en consecuencia, que es interesante ya que esto significa que el código funciona, pero no puede leer las enumeraciones que es mi conjetura?
Si alguien me puede ayudar se lo agradeceria mucho :)
Gracias,
He leido que necesitas declarar los enums tambien en el archivo MQH de la misma manera exacta que fueron declarados dentro de la DLL.
Se ofrece un ejemplo en el anuncio https://www.metatrader5.com/ru/releasenotes/terminal/1898.
MQL5
Para trabajar con las funciones de la biblioteca .NET, basta con importar la propia DLL sin especificar funciones específicas. MetaEditor importa automáticamente todas las funciones con las que es posible trabajar:
.
.
Para llamar a funciones de la biblioteca, basta con importarla:
. El código C# de la función Inc de la clase TestClass tiene el siguiente aspecto:
. El script devolverá el valor 42.
Se está trabajando en el soporte de las librerías .NET, y se prevén futuras versiones para ampliar su uso.
Las funciones WinAPI están agrupadas en archivos separados por propósito:
.
La vinculación sólo funciona con arquitectura de 64 bits.
En Visual Studio community 2019 todo funciona como el autor, pero cuando escribe:
"Cada formulario tiene una lista pública de elementos que contiene. Recorriendo la lista de elementos, el método encuentra aquellos que el controlador es capaz de soportar y se suscribe a los eventos que necesita. Si un elemento del formulario no es soportado por el controlador, simplemente será ignorado. "
Desgraciadamente, si colocas un SplitContainer o un DataGridView en el formulario de prueba, el formulario no se inicia en absoluto, no se sabe muy bien por qué, pero un componente tan complejo como Chart SE INICIA.
Adjunto un ejemplo de prueba de los componentes que se pueden utilizar para la modificación (¡aunque el formulario se inicia!).
al intentar crear un controlador GuiController controller = new GuiController(assembly, form, m_global_events);
da Unexpected exception: The key with this name already exists (for DataGridView) and the controller is NOT created (the form is created, probably it can be shown, but without the controller how to control it?).
Una vez más todo está bien si no hay componentes SplitContainer y/o DataGridView.
quizás alguien más tropiece
este es el lugar en el artículo
"Como puedes ver, el compilador entiende las enumeraciones externas definidas en Net-libraries y sabe cómo trabajar con ellas."
No sé por qué razón, pero el compilador se niega obstinadamente a entender las enumeraciones de C#, así que arrastramos enum de C# a Mql5 y todo funciona.
Sólo que, Vasily, has colocado los botones de compra y venta en el panel de operaciones al revés ))
Pero en general, la cosa más cool ha resultado. ¡Gracias por tu duro trabajo!)
Yo tenía el mismo problema.
Lo resolví un poco diferente - en lugar de ClickOnElement escribí GuiEventType::ClickOnElement. Y después de eso se compila y funciona sin problemas. Pero si este es el caso, realmente no está claro cómo funcionó para Vasily. Quizás hice algo mal...
Pero por lo demás, la cosa es realmente necesaria y útil. Es una pena que MQL5 no tenga algo similar (incorporado).
Yo tuve el mismo problema.
Resolví este problema un poco diferente - en lugar de ClickOnElement escribí GuiEventType::ClickOnElement. Y después de eso se compila y funciona sin problemas. Pero si este es el caso, es realmente poco claro cómo funcionó para Vasily. Quizás he hecho algo mal...
Pero por lo demás, la cosa es realmente necesaria y útil. Es una pena que MQL5 no tenga algo similar (incorporado).
Tuve un error de este tipo:
@MQL_User, hice como tú: " ...en lugar de ClickOnElement escribí GuiEventType::ClickOnElement" - ¡todo funcionó!
Esto no funciona para MT4. He intentado sin ningún resultado.
¡Soy relativamente nuevo en MQL5 y he aprendido mucho de este artículo! ¡Muchas gracias!
Tengo una pregunta. He estado luchando un poco durante los últimos 2 días para averiguar esto a continuación.
He completado con éxito cada paso un par de veces, incluso en otro equipo, pero cada vez que intento compilar el código me sale un mensaje de error.
El compilador MQL estados : "Identificador no declarado" para cualquiera de las enumeraciones de abajo.
Si "comentario" estas enumeraciones de MQL5 entonces funciona en consecuencia, que es interesante ya que esto significa que el código funciona, pero no puede leer las enumeraciones que es mi conjetura?
Si alguien me puede ayudar se lo agradeceria mucho :)
Gracias,
He leido que necesitas declarar los enums tambien en el archivo MQH de la misma manera exacta que fueron declarados dentro de la DLL.
string ReceiveEvent(int event_n); // Returns JSON string.. Use JAson.mqh to Deserialize objects¿Cómo utilizo esto dentro de OnTimer()?
Estoy utilizando el mismo enfoque que se explica en el artículo
Mi pregunta es: ¿qué int tengo que pasar dentro de la función ReceiveEvent?Perdón por mi ignorancia pero no lo entiendo.
Por favor, ¿podéis decirme qué le pasa al programa GuiMtController.mq5 que informa de un error al ejecutarse?