Discusión sobre el artículo "MetaTrader 5 para Linux" - página 24

 
¡Hola a todos!
Estoy corriendo Metatrader 5 build 3815 en wine-8.0.1 en 64-bit Ubuntu 20.04.6 LTS.
En mi Expert Advisor utilizo una función de C# DLL importada (.NET Framework 4.8). Independientemente de lo que la función exportada hacer, el Experto funciona bien la primera vez que lo ejecute, y la segunda vez Metatrader 5 sólo se bloquea. El depurador nunca llega a los puntos de interrupción en el Expert antes de que Metatrader 5 se bloquee.
Parece que algunos recursos relacionados con la DLL no están siendo liberados después de la desinicialización del Experto.
¿Hay alguna manera de arreglar esto?

Código DLL en C#:
namespace Test
{
    public static class TestStatic
    {
        public static string TestFunc()
        {
            return "test return value";
        }
    }
}
Código del Asesor Experto:
#import "Test.dll"
#import

int OnInit()
  {
   // 2ª ejecución crash si se usa esta línea
   Print("DLL function result: ", TestStatic::TestFunc());
   
   // si se utiliza esta línea, no se producirá un segundo fallo
   //Print("no se han utilizado funciones DLL");
   
   return(INIT_SUCCEEDED);
  }
void OnDeinit(const int reason){}
void OnTick() {}

 
WStranger #:
Hola a todos.
Estoy corriendo Metatrader 5 build 3815 en wine-8.0.1 en 64-bit Ubuntu 20.04.6 LTS.
En mi Expert Advisor utilizo una función de C# DLL importada (.NET Framework 4.8). Independientemente de lo que la función exportada hacer, el Experto funciona bien la primera vez que lo ejecute, y la segunda vez Metatrader 5 sólo se bloquea. El depurador nunca llega a los puntos de interrupción en el Expert antes de que Metatrader 5 se bloquee.
Parece que algunos recursos relacionados con la DLL no están siendo liberados después de la desinicialización del Experto.
¿Hay alguna manera de arreglar esto?

Código C# DLL:
Expert Advisor código:

Supongo que con un reinicio de wine windows se solucionará...


 
Dominik Christian Egert #:
Supongo que un reinicio de windows wine lo hará...


Intentado, no ayudó. Cada segundo lanzamiento de EA desde el inicio de la terminal resulta en un aplastamiento, incluso después de wineboot
 
WStranger #:
Probado, no ayudó. Cada segundo lanzamiento de EA desde el inicio de la terminal resulta en un aplastamiento, incluso después de wineboot
No estoy seguro, pero creo que tuve el mismo problema en las ventanas como well....

Pero no puedo recordar cómo lo resolví. O si lo resolví para esa materia....

¿Cómo terminas el EA?
 
WStranger #:
Hola a todos.
Estoy corriendo Metatrader 5 build 3815 en wine-8.0.1 en 64-bit Ubuntu 20.04.6 LTS.
En mi Expert Advisor utilizo una función de C# DLL importada (.NET Framework 4.8). Independientemente de lo que la función exportada hacer, el Experto funciona bien la primera vez que lo ejecute, y la segunda vez Metatrader 5 sólo se bloquea. El depurador nunca llega a los puntos de interrupción en el Expert antes de que Metatrader 5 se bloquee.
Parece que algunos recursos relacionados con la DLL no están siendo liberados después de la desinicialización del Experto.
¿Hay alguna manera de arreglar esto?

Código C# DLL:
Expert Advisor code:

Sí, ya sé cuál es el problema.

Tu DLL no está manejando correctamente los mensajes de carga y descarga.

Te falta el código mínimo requerido para la correcta carga y descarga de DLLs.


 

Dominik Christian Egert #:

¿Cómo se da de baja el EA?

Lo borro manualmente desde un gráfico o lo detengo con el depurador - el resultado es el mismo en ambos casos.

Dominik Christian Egert#:

Te falta el código mínimo necesario para cargar y descargar correctamente las DLL.
¿Tienes alguna especificación o ejemplo de código que explique cómo hacer esto correctamente? Porque la especificación MQL5 dice lo contrario. Tambien mi experiencia dice lo contrario: Estoy usando librerias .NET en multiples proyectos MQL5 y funciona como se espera en Windows 8.1/10/11.
 
WStranger #:

Lo borro manualmente de un gráfico o lo paro con el depurador - el resultado es el mismo en ambos casos.

¿Tiene alguna especificación o ejemplo de código que explica cómo hacer esto correctamente? Porque MQL5 especificación dice lo contrario. También mi experiencia dice lo contrario: Estoy utilizando las bibliotecas .NET en múltiples proyectos MQL5 y funciona como se esperaba en Windows 8.1/10/11.

EDITAR:

https:// learn.microsoft.com/en-us/windows/win32/dlls/dllmain
 
WStranger #:

Lo borro manualmente de un gráfico o lo paro con el depurador - el resultado es el mismo en ambos casos.

¿Tiene alguna especificación o ejemplo de código que explica cómo hacer esto correctamente? Porque MQL5 especificación dice lo contrario. También mi experiencia dice lo contrario: Estoy utilizando las bibliotecas .NET en múltiples proyectos MQL5 y funciona como se esperaba en Windows 8.1/10/11.
Lo que probablemente encontrará es que la DLL no se separa del proceso de terminación.

Yo había estado luchando con este problema con mysqlclient.dll y podría averiguar, probador de estrategia no limpia separar la DLL. Mucho mas parece que Terminal esta cargando el DLL, y ahi es donde se queda cargado.

Por favor, haga alguna investigación sobre esto, porque no puedo confirmar en las versiones anteriores del cliente más, ya que no funcionan a partir de hoy. Por lo tanto, actualmente no tengo ninguna posibilidad de reproducir el problema de entonces.
 
Dominik Christian Egert #:
Lo que probablemente encontrará es que la DLL no se desprende del proceso de terminación.

Yo había estado luchando con este problema con mysqlclient.dll y podría averiguar, probador de estrategia no limpia separar la DLL. Mucho mas parece que Terminal esta cargando la DLL, y ahi es donde se queda cargada.

Por favor, haga alguna investigación sobre esto, porque no puedo confirmar en las versiones anteriores del cliente más, ya que no funcionan a partir de hoy. Por lo tanto, actualmente no tengo ninguna posibilidad de reproducir el problema de entonces.
Qué vergüenza. Descubrí que .NET Framework no estaba correctamente instalado en el prefijo Wine donde ejecuto el terminal Metatrader 5. Tras reinstalarlo, el problema de la DLL quedó resuelto.
¡Gracias por tu ayuda de todos modos!
WineHQ - .NET Framework 4.8
  • appdb.winehq.org
Open Source Software for running Windows applications on other operating systems.
 
WStranger #:
Qué vergüenza. Descubrí que .NET Framework no estaba correctamente instalado en el prefijo Wine donde ejecuto el terminal Metatrader 5. Después de reinstalarlo, el problema de la DLL se resolvió.
¡Gracias por tu ayuda de todos modos!
Gracias por informarme, no lo sabía.