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.

Referencia de C++ a MSVCP140.dll frente a MSVCP140d.dll

Escribí una pequeña dll para llamar a una dll de terceros en C++ y tanto mi dll como la dll de terceros están compiladas en modo de liberación.

Cuando uso dependenciesGui para verificar las dependencias, puedo ver que mi dll y la dll de terceros hacen referencia a MSVCP140.dll, VCRUNTIME140.dll y VCRUNTIME140_1.dll. Y estas dll se cargan correctamente en mi máquina.

Sin embargo, cuando copié los mismos archivos a otra máquina, dependenciesGui muestra que estas dll hacen referencia a la versión de depuración SVCP140D.dll, VCRUNTIME140D.dll y VCRUNTIME140_1D.dll. Y veo el problema de carga de la dll “No se pudo encontrar el módulo especificado. (Excepción de HRESULT: 0x8007007E)” al usar DllImport en C#.

Ambas máquinas tienen instalado el redistribuible de Visual C++ 2015-2022 en Windows 10.

¿Alguna pista de qué sucedió? Gracias.

Edit: Parece que la carpeta principal debe llamarse de cualquier manera excepto Debug, y DependciesGui ahora muestra las dll de VC sin la marca Debug. Si la carpeta principal se llama Debug, entonces buscará las dll de VC de depuración.

Edit 2: El problema principal era que las dll de terceros eran la versión de depuración. Sin embargo, DependciesGui muestra que mi dll hacía referencia a las dll de VC de depuración incluso si se compiló en la versión de lanzamiento.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que cuando los archivos fueron copiados a otra máquina, estaban buscando la versión de depuración de los archivos MSVCP140.dll, VCRUNTIME140.dll y VCRUNTIME140_1.dll en lugar de la versión de lanzamiento. Esto puede deberse a que la carpeta padre se llamaba Debug, lo cual hizo que DependenciesGui buscara las versiones de depuración de las dll en lugar de las versiones de lanzamiento. Cambiar el nombre de la carpeta padre a cualquier otro nombre que no sea Debug debería resolver el problema.

    Además, parece que el problema principal puede haber sido que las dll de terceros eran la versión de depuración, lo cual causó que DependenciesGui mostrara las dll de VC de depuración aunque su dll fue compilada en una versión de lanzamiento. Verificar que todas las dll utilizadas estén compiladas en el mismo tipo de compilación, ya sea de lanzamiento o de depuración, debería prevenir problemas similares en el futuro.

Comments are closed.