2010-01-19 43 views
7

Tengo C++ dll usando en mi proyecto C#, funcionó bien en mi máquina xp, pero cuando copio mi proyecto de depuración en Windows 2003 Server (x64), recibí error a continuación, ¿alguien puede decirme cuál es este problema y cómo puedo solucionarlo?System.DllNotFoundException: no se puede cargar DLL en la ventana 2003

Gracias

"System.DllNotFoundException: No se puede cargar DLL 'lib.dll': Esta aplicación no pudo iniciar porque la configuración de la aplicación es incorrecta volver a instalar la aplicación puede solucionar este problema."

+0

¿Está 'lib.dll' presente en el directorio de la aplicación? – leppie

+0

sí, lo es, pero el error sigue apareciendo ... alguien sabe cómo solucionarlo ... me siento muy frustrado ... – Rick

+1

¿Está lib.dll incorporado en la depuración también? Puede estar intentando vincular el tiempo de ejecución de C++ de depuración que no se instalará si Visual Studio no está instalado en la máquina con Windows 2003. – shf301

Respuesta

6

Para Problema de carga DLL, le sugiero que use la herramienta Dependency Walker. Ha demostrado ser valioso cuando se trata de tales problemas, ya que le mostrará el problema exacto.

Si posee Visual Studio 2005, puede encontrarlo en C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\Bin\depends.exe.

Actualización:

MSVCR90D.DLL es la versión de depuración del tiempo de ejecución de Visual C++ 9.0. Solo debe usarse con fines de depuración. Recomiendo crear una versión de lanzamiento de su biblioteca para evitar el problema de carga de DLL. Sin embargo, si necesita implementar la versión de depuración, encontrará todas las DLL necesarias en C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86.

+0

¡Gracias! Tu respuesta simplemente me ayudó mucho. Dependencia Walker llegó directamente a la raíz del problema. – vfilby

+0

Ese es el boleto. He estado luchando con este problema en unity3d durante una semana. –

11

Se queja de que tiene problemas para ubicar los dlls de CRT. Primero compruebe que el archivo DLL contiene el manifiesto requerido. En Visual Studio, Archivo + Abrir + Archivo, seleccione la DLL y verifique que contenga un nodo RT_MANIFEST. El siguiente problema es que no puede implementar una versión de depuración de su DLL. Tendrá una dependencia en la versión de depuración del CRT, no se puede instalar en el equipo de destino.

Implemente la versión de lanzamiento de su archivo DLL o compile la DLL con la opción/MT para que el CRT esté vinculado de forma estática. Proyecto + Propiedades, C/C++, Generación de código, Biblioteca en tiempo de ejecución. Esto no funcionará si el archivo DLL se compiló con la opción/clr.

1

parece que no ha instalado el tiempo de ejecución de C++ visual en la máquina de destino. Puede instalarlo desde here, ya que parece estar usando las versiones de depuración de esos dlls, ¿quizás también necesita construir su aplicación primero en modo de lanzamiento? This post y this one tienen algunas otras sugerencias que pueden ayudar ...

2

¿Es lib.dll una DLL de 32 bits? Su programa C# se ejecutará en x64 de forma nativa, pero no podrá cargar archivos DLL de 32 bits. Puede intentar cambiar la CPU de destino del proyecto de C# a "x86" para forzar que se ejecute en WOW64.

Cuestiones relacionadas