es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué un programa se cuelga en DllMain() al vincular Xinput.lib?

He creado una biblioteca de entrada y la enlazo con xinput.lib. El programa que usa mi biblioteca de entrada se bloquea al iniciarse antes de que se ejecute cualquier código del usuario, lo que hace que sea bastante difícil de depurar. El programa se bloquea durante la carga de la DLL de xinput que parece ocurrir en la función dllmain generada de mi biblioteca. El error que obtengo con el bloqueo es “xinput: se pasó un parámetro no válido a una función que considera un parámetro no válido como un error”. Si agrego una función dllmain vacía en mi biblioteca de entrada, todo funciona correctamente y no hay bloqueo. ¿Qué podría estar causando el bloqueo cuando no existe una función dllmain? Parece que es una corrupción de algún tipo y no tiene nada que ver específicamente con xinput. Sin embargo, no se ha ejecutado ningún código de usuario antes del bloqueo, por lo que estoy perdido en cuanto a lo que podría ser. ¿Alguna idea? Estoy en Windows 11 y estoy usando Visual Studio 2022 con la cadena de herramientas de clang-cl. También me gustaría señalar que nunca tuve este problema cuando usaba VS 2019 y Windows 10. ¿Podría ser un problema con la nueva cadena de herramientas o el sistema operativo? Gracias.

EDICIÓN 1:

Esto es lo que se ve en la pila de llamadas cuando no hay dllmain en mi biblioteca:

Cuando descomento esa función DllMain vacía en mi biblioteca, no hay bloqueo y todo funciona perfectamente. No tiene sentido ya que esa DllMain no hace absolutamente nada.

EDICIÓN 2:

Puedo confirmar que este mismo comportamiento funciona en un proyecto vacío completo que se enlaza con Xinput.lib. Una aplicación de consola básica con una función main() simple que llama a una función de una biblioteca en blanco que hace referencia a Xinput.lib.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Análisis del bloqueo de Xinput al cargarse una DLL

    Según la información proporcionada, parece que el bloqueo durante la carga de DLL de Xinput está causado por algún tipo de corrupción, posiblemente relacionada con la nueva cadena de herramientas o el sistema operativo. El hecho de que el problema no estuviera presente en versiones anteriores de Visual Studio y Windows apoya esta hipótesis.

    Sin embargo, no está claro por qué agregar una función de DllMain vacía a la biblioteca de entrada resuelve el problema. Es posible que esta función prevenga algún tipo de corrupción de memoria, pero esto es solo especulación sin más información.

    Para investigar el problema más a fondo, sería útil analizar la traza de la pila cuando ocurre el bloqueo para identificar cualquier función o biblioteca específica que pueda estar causando el problema. Además, la depuración con una herramienta como WinDbg o el depurador de Visual Studio podría proporcionar información adicional sobre el problema.

    En general, es necesario realizar una investigación adicional para resolver el problema y garantizar la estabilidad del programa.

Comments are closed.