MT4: capturar error de importación de dll

 

Publi

Resultados 1 al 9 de 9

Tema: MT4: capturar error de importación de dll

  1. #1
    Hola,

    solo una pequeña pregunta: posiblemente alguno de ustedes lo sepa.

    Si tengo algo similar en un archivo de encabezado mqh.

    Código PHP: <code><span style=”color: #000000”> <span style=”color: #0000BB”></span><span style=”color: #FF8000”>#import”xxx.dll”
    </span><span style=”color: #0000BB”>voidyyy</span><span style=”color: #007700”>();
    </span><span style=”color: #FF8000”>#importar
    </span><span style=”color: #0000BB”></span> </span> </code> y no se puede encontrar xxx.dll. Aparece un error en el registro:

    no se puede cargar la biblioteca 'xxx.dll' (error 126)

    Todo el mundo conoce una forma sencilla de mostrar dicho error con una alerta o un cuadro de mensaje en lugar de simplemente escribirlo en el archivo de registro.


    Gracias

  2. #2
    Tengo la misma dificultad en la cuenta de demostración con EA Indior. Cuando compruebo los pros recibo el error can't load xxxx .dll ( 126 ) ¿Alguien cree que pueden arreglar esto por una pequeña tarifa? Tengo acceso al código fuente de este EA Indior ya que el documento es mql4 pero no dll.

  3. #3

    Cita Iniciado por ;
    Aunque debo señalar que no se puede confiar en MT4 para liberar todos los identificadores de Dll tan pronto como se complete un EA de todos modos
    Este error ocurre solo cuando se ejecuta un EA en el probador egy. Allí, FreeLibrary() olvida que el dll que se empaquetó con #import después de la prueba de egy finalizó. Cada ejecución del probador dejará el recuento de referencia. Podría ser posible solucionar esto en deinit() usando IsTesting() y manualmente FreeLibrary() una vez más. Durante el funcionamiento normal (en un gráfico en vivo) siempre liberará lo que se cargó (con #importar) correctamente. Todo lo anterior solo se refiere a la #importación. Si tiene LoadLibrary() adicional en su código, entonces, por supuesto, aún necesita la misma cantidad de llamadas a FreeLibrary().

  4. #4
    Muchas gracias: voy a darle una oportunidad a esto.

  5. #5
    ¡Do!
    ¡Por supuesto que la función IsDllsAllowed() cubre ese pequeño problema!

  6. #6
    Sin problema. No estoy seguro de qué ocurrirá si la casilla Permitir llamadas DLL no está marcada. Me imagino que una llamada a LoadLibrary() devolverá 0 incluso si existe el archivo DLL. Si eso es cierto, puede usar las funciones de WinAPI FileOpen() o FindFirst() para averiguar si el archivo DLL está actualizado, lo que le permite ”Alertar” en cualquiera de los dos casos: 1) DLL existe pero no se puede abrir, lo que indica Permitir Las DLL están desmarcadas 2) El archivo DLL se ha perdido.

  7. #7
    No sin un poco de trabajo de su parte... intente LoadLibrary FreeLibrary que se encuentra en Kernel32.dll para que pueda hacer algo similar a esto en Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); if (hmod ! = 0 ) FreeLibrary(hmod); otra Alerta (xxx.DLL no se puede cargar); Tenga en cuenta que debemos liberar nuestra carga de la DLL, ya que MT4 ya la habrá cargado y Windows mantiene un contador de la cantidad de veces que una instancia de la aplicación carga la DLL. Si no libera nuestra llamada a loadlibrary MT4, no permitirá que la DLL continúe cuando finalice el EA. Aunque debo señalar que no se puede depender de MT4 para liberar todos los agarres de Dll tan pronto como se complete un EA, ¡pero al menos deberíamos hacer lo que necesitamos! Por supuesto, esto solo significa que el archivo DLL es diferente y que es un DLL legítimo; no garantiza que las funciones definidas en su declaración de importación realmente existan. Para eso, debe usar la función GetProcAddress () Consulte los documentos de MSDN aquí
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx

  8. #8

    Cita Iniciado por ;
    No sin un poco de trabajo propio... intente LoadLibrary FreeLibrary que se encuentra en Kernel32.dll para que pueda hacer algo similar a esto en Init() int hmod = LoadLibrary(c:MT4LibraryDirxxx.dll); if (hmod ! ) = 0 ) FreeLibrary(hmod); otra Alerta (xxx.DLL no se puede cargar); Tenga en cuenta que debemos liberar nuestra carga de la DLL porque MT4 ya habrá cargado las ventanas y mantiene un contador de la cantidad de veces que se carga la DLL a través de una instancia de la aplicación. Si no libera nuestra llamada a loadlibrary después, MT4 no permitirá que la DLL continúe cuando...
    ¡Gracias rangebound!

  9. #9

    Cita Iniciado por ;
    Tengo exactamente la misma dificultad en la cuenta de demostración con EA Indior. Mientras reviso a los expertos recibo el error can't load xxxx .dll ( 126 ) ¿Alguien cree que puede corregir esto por un pequeño cargo? Como el documento es mql4 pero no dll, tengo acceso al código fuente de EA Indior.
    Tengo experiencia en repararlo y te pido que lo toques.

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Cookies
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede cambiar la configuración u obtener más información y política de cookies aquí.