2012-07-30 25 views
5

Cuando intento registrar la versión de 32 bits de mi proyecto de C++/ATL conLoadLibrary project.dll falló. El módulo especificado no se pudo encontrar

regsvr32 project.dll 

estoy recibiendo este error:

LoadLibrary("project.dll") failed - The specified module could not be found 

project.dll es mi dll creado utilizando ATL en Visual Studio 10.

La versión de 64 bits registró correctamente.

¿Qué me estoy perdiendo?

+0

¿Dónde está project.dll? en el mismo directorio donde invocas este comando? ¿en el camino? – stijn

+0

sí, está en el mismo directorio (de lo contrario recibiría un error que dice que no existe ese archivo) – Danield

+2

luego abra el dll en el cajero de dependencias y vea qué dlls faltan – stijn

Respuesta

5

He observado exactamente este mismo error, pero la solución no fue la instalación de la redistribuible. Todas las DLL dependientes estaban presentes en el sistema de acuerdo con depends.exe.

En mi caso, el icono de KERNEL32.DLL estaba ligeramente teñido de rojo. Depends.exe no ofrecía muchas explicaciones, pero la búsqueda reveló que faltaba una de las funciones importadas de la DLL en el sistema. Para ver las funciones importadas, seleccione la DLL dependiente en la vista de árbol y busque la importación en el panel derecho. Realice un pedido por la columna PI para ver los iconos rojos de importaciones faltantes.

Seeing the missing import

En mi caso, la función que falta era una función que no existía en mi sistema operativo de destino triste, Windows XP. Ya que mi programa no dependen directamente de esta función, que era capaz de salirse con la #define ing lo siguiente en mi proyecto:

#define WINVER 0x0501 
#define _WIN32_WINNT 0x0501 

Compilar con estas macros hizo lo que la función en cuestión no fue declarado en las cabeceras , y consecuentemente no importado en tiempo de carga. Ahora pude usar regsvr32. Esto, por supuesto, es un caso muy específico (y afortunado). No dependía de esa importación ni de ninguna otra API más nueva, así que pude salirme con la reorientación del proyecto. Si no fuera una DLL del sistema, habría necesitado encontrar una versión más nueva que podría llevar fácilmente a la necesidad de actualizar todo un subárbol del gráfico de dependencia. O lo que es peor, si dependiera de las importaciones faltantes, se necesitaría una refactorización seria.

Para resumir, este mensaje de error puede ser causada por los siguientes temas:

  1. El archivo DLL no se ha encontrado o no se puede leer. Verifica la línea de comando.
  2. Algunas DLL dependientes no se encontraron o no se pudieron leer.
  3. Faltan algunas importaciones de algunas DLL dependientes. Si se trata de DLL de sistema, es probable que se esté dirigiendo a una versión incorrecta de Windows. Si no se trata de DLL de sistema, debe instalar versiones más nuevas de ellos y todas sus dependencias.

1 .: Aparte de ieshims.dll y WER.DLL que parece que es un error en esta antigua herramienta.
2 .: O realmente, algún problema al cargar los archivos DLL en un sistema en particular

+0

aunque no estoy trabajando en ese proyecto más y no tiene la capacidad de verificar esto, esta parece ser la forma correcta de abordar este problema. +1 - ¡Gracias! – Danield

2

La descripción del error es engañosa en este caso. El sistema encuentra su DLL (project.dll) pero puede faltar una (o más) dependencia de su DLL.

+2

Inspeccione su (versión de 32 bits) de su DLL con Dependency walker (http://www.dependencywalker.com/) podría ayudar – mox

+0

Intenté esto, y demostró que faltaban algunos dlls, pero cuando descargué estos dlls y los agregué al mismo directorio que el dll del proyecto, cada vez que encontré el directorio walker falta un nuevo conjunto de dlls – Danield

+1

¡De hecho, algunas imágenes tienen subdependencias! Todas las dependencias estáticas (directas e indirectas) se deben resolver antes de que el cargador de Windows pueda iniciar (en su caso registrar) una aplicación. – mox

1

acabo instalado

Microsoft Visual C++ 2010 Redistributable Package 

y ahora se puede instalar el archivo DLL.

Aunque esto funciona, no estoy muy contento con esto, porque no quiero tener que instalar este paquete en un cliente para que mi dll funcione.

+0

Acabo de notar que en el instalador que estoy usando hay una opción para incluir este paquete como un requisito previo, por lo que el instalador irá y descargará el paquete si el usuario no lo tiene instalado – Danield

Cuestiones relacionadas