cómo descargar la dll

 

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?

 
Familiar. Cuando depuré mi librería, sólo cerrar el terminal ayudó a sobrescribir la versión actualizada de la dll. Y observé el proceso terminal.exe en el administrador de tareas, se descargó en 5-10 segundos después de cerrar MT. Por lo que entendí, es una característica de XP para retener dlls para el reinicio rápido de aplicaciones.
 

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".

 
ForexTools писал(а) >>

encontrado en Internet ;)

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?

 
El comando regsvr32/u <nombre de la DLL> es una opción.
 
Entiendo que cuando la dll es cargada por el terminal, llena ciertas áreas de memoria, pero cuando cierras el terminal, estas áreas son automáticamente borradas por el eje, lo que hace que la dll se descargue. En consecuencia, ¿es posible escribir en la propia dll la función de borrar la memoria y llamarla a través del Asesor Experto (en el momento de la finalización), cómo es este método?
 

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.

 
jartmailru >> :

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.


jartmailru >> :

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.


jartmailru >> :

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!

 
jartmailru >> :

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.

Razón de la queja: