BOOL Apientry DllMain
BOOL Apientry DllMain

 

Publi

Resultados 1 al 10 de 10

Tema: BOOL Apientry DllMain

  1. #1

  2.                         
    Publicidad
  3. #2

    Cita Iniciado por ;
    Cargar DLLs en DllMain es una muy mala idea:
    http://msdn.microsoft.com/en-us/libr...(v=VS.85).aspx
    porque esto puede crear bucles de dependencia en el orden de carga de DLL. En este caso simple (mi enlace python) este problema no puede surgir. Pero es cierto que se necesita precaución y solo se hacen cosas simples y autocontenidas dentro de DllMain () porque, en última instancia, es el sistema operativo el que llama a esta función y no es fácil confiar en el orden exacto en que se llaman. En situaciones complejas o en qué momentos se llaman exactamente.

  4. #3
    [quote = M_j; 4969179] hola, una pequeña pregunta: es el DllMain de BOOL Apientry algo parecido a lo que hiciste en ti Pascal dll. con código PHP: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> inicialización
    PyStatus </span> <span style = ???color: # 007700???> : = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();
    </span> <span style =??? color: # 0000BB ???> finalization
    UnloadPyDll </span > <span style = ???color: # 007700???> ();
    </span> <span style = ???color: # 0000BB???> end </span> <span style = ???color: # 007700???> .
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> Sí, se llama desde exactamente esa función. El binario compilado siempre contendrá automáticamente el código de la biblioteca de tiempo de ejecución que siempre se necesita y una parte de este código es una función DllMain (bastante cumplida y flexible) que hace muchas cosas automáticamente (inicializardesinicializar la administración del montón, manejo de excepciones, Thread almacenamiento local, etc.), cosas que tendría que hacer manualmente en C. Hay algunos lugares donde puede conectarse a todo esto de una manera similar a la de Pascal, uno de estos lugares (existen algunos más) es la inicialización y finalización de las secciones. Se les llama desde dentro del DllMain (). aquí en la línea 27 está la función RTL que manejará la mayor parte de la llamada DllMain () (no se llama directamente DllMain (), todavía hay un poco más de magia de compilación envuelta alrededor de ella)
    http://svn.freepascal.org/cgi-bin/vi...nc?view=markupLas secciones de inicialización y finalización se llaman desde algún lugar dentro de los procedimientos de PascalMain y FPC_Do_Exit que se llaman allí. Como puede ver, hay algunos lugares más posibles para conectarse asignando ciertas variables de procedimiento que se llaman allí. Todo esto es realmente material incondicional dentro de la biblioteca de tiempo de ejecución que solo debe ser entendido por los que piratean el compilador y la propia RTL. Si descarga estas fuentes e intenta seguir todas estas llamadas para ver lo que está pasando (o pasar a través de él con el depurador) encontrará que en realidad está bastante cumplido y hay muchas cosas que suceden bajo el capó para hacer que El programa Pascal idéntico (o biblioteca) se compila y ejecuta tan fácilmente en una amplia gama de arquitecturas y sistemas operativos. Los usuarios normales (programadores) solo usan las secciones de inicialización y finalización (si las necesitan o las dejan alejadas) (y tal vez algunas de las otras funciones de enlace como están documentadas) y no se preocupen por todo esto y todo debería funcionar. Pero aún es interesante ver este código y al menos intentar entenderlo (hasta ahora solo he entendido partes de él, pero no soy uno de los piratas informáticos del compilador, por lo que no necesito saber todo).

  5. #4

    Cita Iniciado por ;
    hola, 7 bits, una pequeña pregunta: es el Apollismo Dll de BOOL. Es algo similar a lo que hiciste en ti Pascal dll. con código PHP: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> inicialización
    PyStatus </span> <span style = ???color: # 007700???> : = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();
    </span> <span style =??? color: # 0000BB ???> finalization
    UnloadPyDll </span > <span style = ???color: # 007700???> ();
    </span> <span style = ???color: # 0000BB???> end </span> <span style = ???color: # 007700???> .
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> entraría en el BOOL Apientry DllMain si lo escribiera en C , de ser así, ¿cómo que parecen: [php]/ ---------------------------------------- -------------------------- /| |/ ----------------------------------------------- ------------------- BOOL ...
    Cargar DLL en DllMain es una muy mala idea: http://msdn.microsoft.com/en-us/library/ms682583(v=VS.85).aspx

  6. #5
    hola, 7 bits, una pequeña pregunta: es el Apollismo Dll de BOOL. Es algo similar a lo que hiciste en ti Pascal dll. con código PHP: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> inicialización
    PyStatus </span> <span style = ???color: # 007700???> : = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();
    </span> <span style =??? color: # 0000BB ???> finalization
    UnloadPyDll </span > <span style = ???color: # 007700???> ();
    </span> <span style = ???color: # 0000BB???> end </span> <span style = ???color: # 007700???> .
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> entraría en el BOOL Apientry DllMain si lo escribiera en C , de ser así, ¿cómo que parecen: Código PHP: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> </span> <span style = ???color: # FF8000???>/ -------------------------------------------------- ----------------
    /||
    / ------------------ ------------------------------------------------ < br> </span> <span style = ???color: # 0000BB???> BOOLAPIENTRYDllMain </span> <span style = ???color: # 007700???> (</span> <span style = ???color: # 0000BB???> HANDLEhModule </span> <span style = ???color: # 007700???>, </span> <span style = ???color: # 0000BB???> DWORDul_reason_for_call </span> <span style = ???color: # 007700???>,span> <span style = ???color: # 0000BB???> LPVOIDlpReserved </span> <span style = ???color: # 007700???>)
    {
    </span> <span style = ???color : # FF8000 ???>/----
    </span> <span style =??? color: # 007700 ???> switch (</span> <span style =??? color: # 0000BB ???> ul_reason_for_call </span> <span style =??? color: # 007700 ???>)
    {
    case </span> <span style =??? color: # 0000BB ???> DLL_PROCESS_ATTACH <span> <span style = ???color: # 007700???>:
    </span> <span style = ???color: # 0000BB???> PyStatus </span> <span style = ???color: # 007700???> = </span> <span style = ???color: # 0000BB???> 0 </span> <span style = ???color: # 007700???>;
    </span> <span style = ???color: # 0000BB ???> LoadPyDll </span> <span style =??? color: # 007700 ???> ();

    caso </span> <span style =??? color: # 0000BB ???> DLL_THREAD_ATTACH </span> <span style = ???color: # 007700???>:
    estuche </span> <span style = ???color: # 0000BB???> DLL_THREAD_DETACH </span> <span style = ???color: # 007700???>: br> case </span> <span style = ???color: # 0000BB???> DLL_PROCESS_DETACH </span> <span style = ???color: # 007700???>:
    </span> <span style = ???color : # 0000BB ???> UnloadPyDll </span> <span style =??? color: # 007700 ???> ();

    break;
    }
    </span> <span style = ???Color: # FF8000???>/----
    </span> <abarcan el estilo = ???Color: # 007700???> return (</span> <span style = ???color: # 0000BB???> TRUE </span> <span style = ???color: # 007700???>);
    }
    </span> <span style = ???color: # 0000BB???> </span> </span> </code> o uno pondría eso con DLL_THREAD_ATTACH, DLL_THREAD_DETACH

  7. #6
    Muchas gracias 7bit. Muy amable de su parte.

  8. #7
    Solo lo necesita si necesita conectarse a la cargadescarga, etc. De lo contrario, todo lo que hace es devolver el valor verdadero (lo que significa éxito) y la misma función vacía vacía (que solo devuelve el éxito y no hace nada más) debe instalarse automáticamente el compiladorenlazador cuando no lo declaras tú mismo.

  9. #8
    Rango de gracias limitado. Pero diría que es aconsejable usar algo como el ejemplo de MT4 en la mayoría de los casos. O simplemente déjelo como una serie de otras dlls mt4.

  10. #9
    Windows siempre llama a la función APIENTRY (si existe una), cada vez que se cargadescarga una DLL, y se puede usar para asignarliberar memoria y ejecutar rutinas de configuración. Dado que se proporciona un contexto adecuado código puede ser implementado. Esto puede ser útil para administrar recursos DLL internos cuando una DLL es utilizada muchas veces por una aplicación EG por múltiples indicadores o por múltiples EA. Lea aquí para más información
    http://support.microsoft.com/kb/815065

  11. #10
    Hola;

    Solo una pequeña pregunta: miré un buen número de archivos de origen MT4 dll y noté que algunos usan: BOOL APIENTRY DllMain mientras que otros no.

    (por ejemplo, expertos en MT4 oficialesmuestrasDLLSample

    Código PHP: <code> <span style = ???color: # 000000???> <span style = ???color: # 0000BB???> </span> <span style = ???color: # FF8000???>/ ---- -------------------------------------------------- ------------
    /||
    / ---------------------- --------------------------------------------
    <span> <span style = ???color: # 0000BB???> BOOLAPIENTRYDllMain </span> <span style = ???color: # 007700???> (</span> <span style = ???color: # 0000BB???> HANDLEhModule </span > <span style = ???color: # 007700???>, </span> <span style = ???color: # 0000BB???> DWORDul_reason_for_call </span> <span style = ???color: # 007700???>, </span> < span style = ???color: # 0000BB???> LPVOIDlpReserved </span> <span style = ???color: # 007700???>)
    {
    </span> <span style = ???color: # FF8000??? >/----
    </span> <span style = ???color: # 007700???> switch (</span> <span style = ???color: # 0000BB???> ul_reason_for_call </span> <span style = ???color: # 007700???>)
    {
    caso </span> <span style = ???color: # 0000BB???> DLL_PROCESS_ATTACH </span> <span style = ???color: # 00 7700 ???>:
    caso </span> <span style =??? color: # 0000BB ???> DLL_THREAD_ATTACH </span> <span style =??? color: # 007700 ???>:
    caso </span> <span style = ???color: # 0000BB???> DLL_THREAD_DETACH </span> <span style = ???color: # 007700???>:
    case </span> <span style = ???color: # 0000BB???> DLL_PROCESS_DETACH <span> <span style = ???color: # 007700???>:
    break;
    }
    </span> <span style = ???color: # FF8000???>/--- -
    </span> <span style = ???color: # 007700???> return (</span> <span style = ???color: # 0000BB???> TRUE </span> <span style = ???color: # 007700 ???>);
    }
    </span> <span style =??? color: # 0000BB ???> </span> </span> </code> Mi pregunta: ¿hay alguna regla general? ¿Que tal como la muestra de MTF debería incluirse por defecto?

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •  
Uso de cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español. Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.