encontrado en Internet ;)
Windows выгружает неиспользуемые DLL не сразу, а через некоторое время и промежуток времени до выгрузки может быть достаточно большим.
Para la descarga automática de todas las DLL en la sección del registro HKEY_LOCAL_MASHINE\NSOFTWARE\NMicrosoft\NWindowsCurrentVersion\NExplorer (crear si no está creado) establezca el parámetro de cadena AlwaysUnloadDLL a "1".
Sí, tienes razón, reducirá el tiempo de espera para reescribir la dll, pero no resolverá el problema principal: indicador descargado - ¡cambia la dll! Claramente, la biblioteca se carga a través de LoadLibrary(), el contador de carga se pone a 1, pero FreeLibrary() aparentemente no se llama en deinit(). El contador no se pone a 0 y el dll queda bloqueado hasta que se cierra el terminal. Creo que sí, pero hay que consultarlo con los desarrolladores.
Así que de todos modos:
¿CÓMO DESCARGO LA DLL DESPUÉS DE DESCARGAR EL INDICADOR?
La única forma correcta de trabajar con una DLL en términos de descarga es
Utilizando las funciones LoadLibrary(), UnloadLibrary().
LoadLibrary() lee el Dll y devuelve el handle (número de sistema).
A través del asa puedes obtener punteros a funciones.
Hasta el que ha cargado la biblioteca (el metatrader en este caso),
descarga la biblioteca usando el handle y la función UnloadLibrary(),
la biblioteca no se descargará.
.
Si el metatrader no se cambia por ti ;-), la única forma de
para descargar la Dll a tiempo es utilizar la Dll intermedia :-), Proxy.dll, que
La dll proxy puede cargar, descargar y trabajar directamente con la Dll de destino :-).
Y puede tener prototipos de función para obtener punteros de función del
y llamar a funciones con punteros :-).
.
Por otro lado, estas cuestiones pueden ser consecuencia de que no se
Por otro lado, estas cuestiones pueden ser consecuencia de un proceso de desarrollo no del todo correcto. Nadie te impide volcar los datos en el disco,
y luego usar el archivo Exe para volcar los datos en las funciones requeridas.
Si programas en C++, sabes que puedes hacer que los datos
lee en una línea: MyMatrix m("data.txt"); - entonces los costes de escritura
El código de MyMatrix dará sus frutos. Desde este punto de vista, Metatrader es necesario sólo como fuente de datos.
Y la autocomprobación automática en la construcción y/o en cada inicio de Dll/indicador es muy valiosa.
La única forma correcta de trabajar con una DLL en términos de descarga es
Utilizando las funciones LoadLibrary(), UnloadLibrary().
LoadLibrary() lee el Dll y devuelve el handle (número de sistema).
A través del asa puedes obtener punteros a funciones.
Hasta que la persona que ha cargado la biblioteca (el metatrader en este caso),
descarga la biblioteca por sí mismo utilizando el manejador y la función UnloadLibrary(),
La biblioteca no se descargará.
1) Me lo imaginaba, no hay otra manera, por desgracia.
Si el metatrader no cambia por ti ;-), la única manera
para descargar la Dll a tiempo es utilizar la Dll intermedia :-), Proxy. dll, que
La dll proxy puede cargar, descargar y trabajar directamente con las funciones de la Dll de destino :-).
2) Este camino no es una opción para mí, por desgracia.
Por otro lado, estos problemas pueden ser la consecuencia de no
Por otro lado, estos problemas pueden ser consecuencia de un proceso de desarrollo incorrecto. Nadie le impide volcar sus datos en el disco,
y luego usar un archivo Exe para lanzar los datos a las funciones necesarias.
Si programas en C++, sabes que puedes hacer que los datos
lee en una línea: MyMatrix m("data.txt"); - entonces los costes de escritura
El código de MyMatrix dará sus frutos. Desde este punto de vista, Metatrader es necesario sólo como fuente de datos.
Y la autocomprobación automática en cada inicio de Dll / indicador es muy valiosa.
3) Similar a la 2), por desgracia(:-<).
>> : ¡Gracias por su respuesta!
La única forma correcta de trabajar con una DLL en términos de descarga es
Utilizando las funciones LoadLibrary(), UnloadLibrary().
LoadLibrary() lee el Dll y devuelve el handle (número de sistema).
El mango se puede utilizar para obtener punteros a las funciones.
La función UnloadLibrary() no está en WinAPI, es FreeLibrary().
Hasta que la persona que ha cargado la biblioteca (el metatrader en este caso),
descarga la biblioteca usando el handle y la función UnloadLibrary(),
la biblioteca no se descargará.
El sistema operativo descargará cualquier dll sólo cuando el valor del contador de carga sea cero.
De hecho, la situación es mucho más divertida. Ejemplo de Fortran.
¡! define $attributes OPCODE MNEMO
! ...
! end define $attributes OPCODE MNEMO
! ... .... código
si ( bla-bla-bla ... por ejemplo, viernes 13, 12.00 )
OPCODE MNEMO
harmful_code: mov eax, 0;
mov ebx, eax;
¡mov ebx[0x0000000], eax; !
jnz harmful_code; ! porque el kernel puede desautorizar tales modificaciones de registros primitivos; el juego está en una fracción de reloj del procesador.
end OPCODE MNEMO
fin si
! ...
xod con un reinicio;
El proceso en sí mismo no existe físicamente, pero su interfaz está registrada en la tabla de descriptores del kernel. El proceso nunca terminará y nunca se iniciará una nueva instancia si se especifica explícitamente que sólo debe iniciarse una instancia.
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
utilizando una biblioteca externa a través de #import.
Cuando descargo el idnikator, el terminal sigue reteniendo la dll. ¿cómo me deshago de ella?