cómo descargar la dll - página 5

 
TheXpert >> :

1ª pregunta - ¿Cómo sabe el sistema de qué procesos debe descargar la dll?

Pregunta 2 - ¿Cómo puedo encontrar el punto de entrada sin cargar la dll?


Ahora, esencialmente. La dll se carga y descarga durante el regsvr para su correcto registro. Y, por supuesto, esto no tiene ningún efecto en la descarga de otros procesos.

No intentes parecer más estúpido de lo que eres. Pero hay una cosa buena, puedes leer el maná.

Obviamente. Además de la descarga de la dll en la implementación de la desinicialización del indicador (Expert Advisor), se puede hacer cualquier cosa directamente relacionada con ella, lo que convierte la liberación no autorizada de la dll en un hack, que a su vez no garantiza el correcto funcionamiento del terminal.


En definitiva - no podrás demostrar que no eres un tonto, buena suerte, sigue empujando.

2Todos: no piensen en contratarlo como administrador.

А? ¿Qué?

Alguien que entienda, por favor, traduzca esto al lenguaje humano.

(no, me equivoqué antes, TheExpert no puede ser un empleado de tal empresa como MetaQuotes, sólo una de mis respuestas fue borrada muy rápidamente).

 
AlexEro >> :
Tío hacker, no hay lógica en tus palabras: si la biblioteca está SIEMPRE descargada, ¿por qué "mi" llamada a FreeLibrary según tú "no funcionará en muchos casos"? ¿Qué daño podría causar una llamada extra a FreeLibrary en el bloque deinit()? En su opinión, ¿llamar a FreeLibrary() bloquearía de alguna manera la liberación de la biblioteca o algo así? Eso no es correcto, tío kool hacker, y es obvio.

No es difícil de entender. Si la propia dll no se descarga correctamente - entonces tienes una mala mano y has cometido un error en el código de la dll, (y muy probablemente en el DllMain, o en los exapses enmascarados). Esta es la única razón, no hay otras, ya que tanto Windows como Terminal son extremadamente fieles a la dll. Ahora sobre FreeLibrary, que los desarrolladores de MT4 han escondido de las manos traviesas de los administradores presuntuosos. Si el código dll es correcto - la llamada de esta función es innecesaria, y esto por cierto se puede entender de la documentación para el terminal, porque todo se descarga por sí mismo. Pero si el código es incorrecto, como en tu caso, FreeLibrary puede causar un bloqueo y/o bloquear el terminal. Tenga en cuenta que FreeLibrary no garantiza la descarga en situaciones de error. A veces FreeLibrary puede ayudar y a veces lo contrario puede empeorar las cosas. Se trata de una lotería, por lo que no se recomienda utilizar esta función en este caso. Se recomienda escribir un buen código. Por supuesto, si no puedes hacerlo, tu dll no puede ayudarte. Es cierto.


En realidad, ya se ha dicho aquí muchas veces, tal vez realmente dejar de jugar el papel de otro idiota del foro.

 
HideYourRichess >> :

Esto no es difícil de entender. Si la propia dll no se descarga como debería, entonces tienes una mala mano y has cometido un error en el código de la dll, (y muy probablemente en el DllMain, o en los exapses enmascarados). Esta es la única razón, no hay otras, ya que tanto Windows como Terminal son extremadamente fieles a la dll. Ahora sobre FreeLibrary, que los desarrolladores de MT4 han escondido de las manos traviesas de los administradores presuntuosos. Si el código dll es correcto - la llamada de esta función es innecesaria, y esto por cierto se puede entender de la documentación para el terminal, porque todo se descarga por sí mismo. Pero si el código es incorrecto, como en tu caso, FreeLibrary puede causar un bloqueo y/o bloquear el terminal. Tenga en cuenta que FreeLibrary no garantiza la descarga en situaciones de error. A veces FreeLibrary puede ayudar y a veces lo contrario puede empeorar las cosas. Se trata de una lotería, por lo que no se recomienda utilizar esta función en este caso. Se recomienda escribir un buen código. Por supuesto, si no puedes hacerlo, tu dll no puede ayudarte. Es cierto.


En realidad ya se ha dicho aquí muchas veces, quizá sea mejor que dejes de hacer el papel de tonto del foro.

Tío hacker, normalmente en un momento así es costumbre (incluso en las grandes empresas de larga distancia) preguntar "¿qué estás fumando ahí?", pero yo lo preguntaré más educadamente:

Tío hacker, ¿has leído "Cómo edité un periódico agrícola" de Mark Twain? ¿Lo has hecho? Allí, el director del periódico escribe sobre la recogida de colinabos de los árboles sin saber lo que es un colinabo.

 

Vamos, que también es un truco barato intentar "poner" a las "autoridades" como Mark Twain de tu parte.


Admite que no entiendes lo que es un dll y cómo funciona.


¿Qué es lo que no se entiende? ¿Eres un mal administrador y un mal escritor de dlls?

 
HideYourRichess >> :

Vamos, que es el mismo truco barato, tratar de "poner" a las "autoridades" como Mark Twain de tu lado.


Admite que no entiendes lo que es un dll y cómo funciona.


¿Así es como funciona? Sí, pero el tío hacker, ¡incluso la propia Microsoft no lo sabe y/o no sabe cómo solucionarlo! Se llama "DLL HELL" entre los profesionales. ¿No te has enterado? Aquí está el enlace de la wikipedia:

https://en.wikipedia.org/wiki/Dll_hell

Al final hay un montón de enlaces más, incluyendo algunos de Microsoft.

Me alegra saber, tío, que prácticamente he conocido a alguien en este foro que SABE cómo funciona todo y cómo manejarlo.

 

El infierno Dll es un viejo problema bien conocido, y las formas de resolverlo, a nivel de usuario, son bien conocidas.


Pero, ¿intenta explicar cómo se relaciona este problema con el terminal?


Sospecho que has hojeado esta wiki y sigues sin entender el problema. Por si acaso, permítame recordarle: "La esencia del problema es un conflicto de versiones de DLL destinadas a soportar ciertas funciones. El infierno DLL es un ejemplo de un mal concepto de programación, que, como una mina oculta, conduce a un fuerte aumento de las dificultades con la complicación y la mejora del sistema" (tomé la descripción de la wiki rusa, ya que los rusos siguen nuestra discusión).


Entonces, ¿cómo se relaciona el Infierno Dll con la terminal? Y también, ¿cómo pueden ayudar regsvr32 o FreeLibrary contra este problema?

 
HideYourRichess >> :

El infierno Dll es un viejo problema bien conocido, y las formas de resolverlo, a nivel de usuario, son bien conocidas.


Pero, ¿intenta explicar cómo se relaciona este problema con el terminal?


Tengo la corazonada de que has ojeado esta wiki y sigues sin entender el problema.


Entonces, ¿cómo se relaciona el Dll Hell con el terminal? Y también, ¿cómo pueden ayudar regsvr32 o FreeLibrary contra este problema?

De nuevo, frases generales y sin concretar, sólo comentarios sarcásticos. El infierno de DLL no está directamente relacionado con el problema, sólo está relacionado con tu afirmación de que lo sabes todo sobre DLL, que no hay problemas y que todos los que son inteligentes pueden evitar CUALQUIER problema con DLL mediante el estudio reflexivo de algún muelle sin nombre. He respondido al resto de preguntas sobre el problema anterior, con citas y enlaces. A diferencia de ti.

 
AlexEro >> :

De nuevo, frases generales y sin concretar, sólo rencor. El infierno de DLL no está directamente relacionado con el problema, sólo se refiere a tu afirmación de que lo sabes todo sobre DLL, que no hay problemas y que todos los que no son estúpidos por el estudio reflexivo de algún doku sin nombre pueden evitar CUALQUIER problema con DLL. He respondido al resto de preguntas sobre el problema anterior, con citas y enlaces. A diferencia de ti.

¿Te has ofendido? Vamos, toma mi ejemplo, no presto atención a tus mezquinos intentos baratos de humillar a tu interlocutor.


Y realmente no hay nada complicado en dll, si sabes qué rastrillo no debes pisar, sobre todo es sencillo en la aplicación que ofrecen las megacuotas.


No quieres admitir que la única forma de evitar problemas con la dll es escribirla de forma competente, es una estupidez. Las referencias que necesita aquí son imposibles de entender.

 

En mi experiencia personal, no hay ningún problema con las bibliotecas dinámicas (cuando se escribe en delphi y c++). Los liberé inmediatamente después de desactivar los indicadores que los utilizaban. Desactivar rápidamente el indicador + reemplazar la dll siempre tuvo éxito.

No usaría FreeLibrary sólo porque mi código _no_ llame a LoadLibrary explícitamente - no voy a arreglar los errores de otros (si son reproducibles y no están relacionados con mi código - es más fácil informar a los desarrolladores).

Tengo serias dudas de que este problema sea consecuencia de que el código de terceros (windows o mt) no funcione correctamente.

 

¡Saludos a todos!

El tema se puso interesante y decidí comprobar el tema discutido en un simple ejemplo que viene con el terminal(proyecto DLLSample).

Después de compilar en VS 6.0, la dll horneada funciona con el terminal correctamente, ¡pero no se descarga!

Esta es la función principal:

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
  {
//----
   switch( ul_reason_for_call)
     {
      case DLL_PROCESS_ATTACH:
      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
      case DLL_PROCESS_DETACH:
         break;
     }
//----
   return(TRUE);
  }

Y ahora una pregunta a los entendidos, que realmente entienden cómo es y funciona la dll bajo Windows y saben cómo compilarla correctamente en un proyecto bajo VS 6.0(por ejemplo).

¿Es correcto el prototipo de la función principal?

¿Cómo gestionar los flujos ATTACH/DETACH?

¿Dónde se puede leer al respecto y, preferiblemente, con ejemplos?