Creación de una interfaz gráfica para los MQL en modo gráfico. - página 5

 

Aquí hay un ejemplo de una forma simple dibujada en Sharpe en 10 minutos con un EA. El formulario recibe los ticks del gráfico, directamente del EA como de la dll nativa, sin sockets, archivos y demás. Y el formulario se adjunta al gráfico. Hay algún problema con el accesorio que hay que resolver. Pero es posible no adjuntarlo, lo que quieras.

 
Алексей Барбашин:

Aquí hay un ejemplo de una forma simple dibujada en Sharpe en 10 minutos con un EA. El formulario recibe los ticks del gráfico, directamente del EA como de la dll nativa, sin sockets, archivos y demás. Y el formulario se adjunta al gráfico. Hay algún problema con la fijación que hay que resolver. Pero no se puede adjuntar - lo que quieras.

Dime qué compilador de GitHub has utilizado. ¿O editó a mano una compilación afilada? No lo necesito. Es más fácil escribir C++ DLL en código mixto (administrado + no administrado).

 
Yuriy Asaulenko:

Dime qué compilador de GitHub has utilizado. ¿O has editado la compilación de sharded a mano? No es una buena idea. Es más fácil escribir C++ DLL en código mixto (administrado + no administrado).

Ya lo escribí en el post anterior: todo se hace con herramientas propias de VS. Estoy usando VS 2017 Community. Justo al principio del proyecto se conecta la biblioteca DllExport con Nuget. No es necesario finalizar nada manualmente después de compilar el proyecto, desde la palabra TOTALLY.

No recomiendo la plantilla deR.Giesecke. Aquí con ella hay una pandereta real, si es que se puede arrancar. Con esta biblioteca ni siquiera notarás la diferencia. La propia dll se "convierte en nativa" durante la compilación normal.

 
Алексей Барбашин:

Ya lo escribí en el post anterior: todo se hace con herramientas propias de VS. Estoy usando VS 2017 Community. Justo al principio del proyecto, la biblioteca DllExport con Nuget está conectada a él. No es necesario finalizar nada a mano después de compilar el proyecto, desde la palabra TODO.

Sí, sí, exactamente con Nuget. No me funcionó, pero había una DLL no estándar para la interacción con la C-API, + más funciones de devolución de llamadas. No sé, por alguna razón lo recordaba como un compilador, o era una solución diferente.

Y en este caso, la solución es realmente buena y sencilla.

 
Алексей Барбашин:

¿Por qué la izquierda? Todo se hace con los medios propios de VS. Nuget tiene la biblioteca DllExport, que modifica la clase System.Runtime.InteropServices una vez, y luego todo se compila normalmente. Así que no hace falta bailar la pandereta, ni envoltorios. Crear formularios es mucho más fácil en c# que escribirlos en un archivo adicional, como sugiere Maxim. Respeto a Maxim y su trabajo, pero en este caso el mundo de la Red se nos abre sin dificultades adicionales.

Es interesante, ¿lo has comprobado tú mismo? Solía hacer la conexión MT4 - C++dll - C#dll, no podía cargar C#dll directamente.

https://www.nuget.org/packages/DllExport/ ¿es así?

DllExport 1.6.0
DllExport 1.6.0
  • www.nuget.org
The open implementation of unmanaged exports for .NET ( DllExport )        Source code and all details here: https://github.com/3F/DllExport                To configure projects via current package:        ========================================================        DllExport -action Configure -dxp-version 1.6.0...
 
Алексей Барбашин:

Ya lo escribí en el post anterior: todo se hace con herramientas propias de VS. Estoy usando VS 2017 Community. Justo al principio del proyecto, la biblioteca DllExport con Nuget está conectada a él. No es necesario finalizar nada manualmente después de compilar el proyecto, la palabra TOTALLY.

No recomiendo la plantilla deR.Giesecke. Aquí con él hay una pandereta real, si es que se puede empezar. Con esta biblioteca ni siquiera notarás la diferencia. Su dll se "convertirá en nativo" durante la compilación normal.

Tzek, ¿puedes explicarlo? La tarea para el ejemplo es hacer un panel en C# que obtenga información del EA y le envíe comandos. ¿Cómo utilizar dllexport para esto?

No hace falta explicarlo con detalle, sólo los pasos, el qué y el cómo reaccionan entre sí.

 
Alexey Volchanskiy:

Es interesante, ¿lo has comprobado tú mismo? Solía hacer el enlace MT4 - C++dll - C#dll, no podía cargar C#dll directamente.

https://www.nuget.org/packages/DllExport/ ¿es así?

Por supuesto que lo he comprobado. Más arriba he dado un ejemplo de creación de dlls con formulario.

 
Алексей Барбашин:

Por supuesto que sí. Más arriba he dado un ejemplo de dll con un formulario.

¿Es esta foto un ejemplo?

De acuerdo, me encargaré yo mismo.

 
Alexey Volchanskiy:

Tezka, ¿puedes explicarte mejor? La tarea para el ejemplo es hacer un panel en C#, que recibe información del EA y le envía comandos. ¿Cómo utilizar dllexport para esto?

No hace falta que lo explique con detalle, sólo los pasos, el qué y el cómo reaccionan entre sí.

1. Crear un proyecto en c# Class Library (net Framework)

2. Añade la biblioteca DllExport de NuGet al proyecto. Es mejor descargarlo desde el servidor. Ponga el archivo por lotes en la carpeta del proyecto.

3. Lanzamos la librería a través de la línea de comandos (hay un vídeo en el hub) y modificamos el System.Runtime.InteropServices.

En este momento se han completado todos los preparativos. Reiniciar el proyecto

4. Crea una función de exportación y añade el modificador [DllExport]y antes de ella. Si el paso 3 se realiza correctamente, el compilador no se quejará del modificador

5. Añade el formulario al proyecto y confecciónalo como sea necesario.

6. Añade a la clase de funciones exportadas (creadas en el paso 1) la función de abrir el formulario, por ejemplo, Start

7. Crear una función para abrir el formulario, por ejemplo OpenDialog, como se hace en la función principal cuando se crea una aplicación en el formulario de Windows

8. En la función Start, creamos un hilo para el que especificamos la función OpenDialog como método ejecutable

9. Cree un EA/indicador/script y conecte la dll como de costumbre. ))

10. Llama a la función Start de mql

El formulario se iniciará en un hilo separado y no detendrá el proceso en mql como lo haría un diálogo modal normal.

La transferencia de datos de mql a un formulario se realiza de la misma manera que la transferencia de datos entre clases e hilos de la propia aplicación.

1. Crea una función en una clase a exportar que será llamada por mql para transferir datos; por ejemplo, SendTick.

Recuerde, que mql sólo verá los métodos de la clase (funciones), que tienen el modificador [DllExport] instalado.

2. Crear un delegado de eventos en esta clase con parámetros

3. En el formulario tenemos que suscribirnos al evento de la clase exportada

4. Al llamar al método SendTick desde mql, llamamos al evento creado y pasamos los parámetros

5. En el formulario, creamos un manejador de eventos que intercepta el evento y envía los datos al formulario, o hace otra cosa.

Eso es todo. No se requiere nada más.

Por si acaso, el formulario y la clase de exportación están trabajando en diferentes hilos, así que para poner la información en el formulario necesitamos un delegado de procesamiento de datos del hilo adyacente.

Si lo consigues, por favor, comparte el "resultado" y las impresiones sobre la simplicidad. )))

Lo más "difícil" de todo esto será la instalación de la biblioteca. )))

 
Alexey Volchanskiy:

¿Es esta foto un ejemplo?

Ya veo, lo resolveré yo mismo.

Alexey, he detallado la imagen. )) Si tienes más dudas, pregúntame, ¡intentaré responderlas!

Razón de la queja: