2009-08-07 26 views
25

Así que estoy usando un SDK para un generador de números aleatorios de hardware que proporciona un dll llamado PsyREG.dll para interactuar con él, así como también una fuente C# para usar los métodos del dll.DllNotFoundException, pero DLL está allí

Ha funcionado en el pasado, pero de alguna manera ha dejado de funcionar. Mis manos están un poco atadas ya que en realidad no tengo acceso al dispositivo en cuestión en este momento, así que no puedo probar muchas cosas ...

Sin embargo, esto es lo extraño. El dll está ahí, el mismo lugar en el que siempre ha estado. Ahd, de hecho, File.Exists ("PsyREG.dll") devuelve verdadero, y he comprobado dos veces y eso es exactamente de la misma manera que la fuente C# proporcionada lo importa, p. [DllImport ("PsyREG.dll")].

¿Alguna idea?

Respuesta

34

Es probable que este dll tenga algunas dependencias que no están registradas o no están en la misma carpeta de su aplicación.

+0

Gracias, eso fue todo. Había algunas otras cosas que eran necesarias, pero por algunas razones no pensé en verificar eso (incluido el hecho de que decía que no podía cargar PsyREG.dll, no es un archivo diferente) – Asmor

+1

Veces como este son cuando estallar Reflector. Puede mostrarte las dependencias. En particular, puede mostrarle cuáles no se encuentran. –

+0

¿De verdad? ¿Reflector encuentra dependencias no administradas? ¿Dónde está esa opción? – erikkallen

1

Quizás deba comprobar si está esperando una versión de producto específica de la dll, y asegúrese de que las versiones del producto aún coinciden correctamente.

4

abierto DLL en el sistema problemático en http://www.dependencywalker.com/

+0

Esta aplicación hizo el trabajo por mí. –

+0

genial ... esa herramienta me ayudó a resolver muchos problemas de instalación durante la implementación. – cbuteau

0

que estaba tratando con la misma excepción en lo que respecta a uno de mi DLL (vamos a llamarlo A). C# se bloqueaba porque afirmaba que no podía encontrar esta DLL (A) (mientras estaba allí en la misma carpeta que el ejecutable).

Resultó que el problema se debía a que A tenía dependencia de otra DLL (llámelo B). B no estaba en la ruta, por lo que A no pudo cargarlo cuando lo necesitó. Dado que B necesitaba una gran cantidad de otras DLL, la solución fue agregar el directorio B a la variable de entorno PATH.

Es interesante ver cómo C# se bloquea con el error diciendo que A no se encuentra cuando en realidad B no se ha encontrado ...

+0

¿Puedes explicarme un poco la 'solución fue agregar el directorio de B a la variable de entorno de ruta'? Actualmente estoy luchando con casi el mismo problema, la única diferencia es que mi Dll quiere algunos * .so archivos en lugar de otros Dll. – Stefan

+0

@Stefan Creo que en el terminal Linux harías 'export PATH = $ PATH: YOUR-SO-FILE-PATH' para agregar el directorio' YOUR-SO-FILE-PATH' a tu variable de entorno PATH. De esta manera, cuando su archivo 'so' necesita ser cargado, la ruta especificada por PATH se buscará para encontrar ese archivo' so'. – M2X

+0

Gracias, lo he intentado de esa manera pero realmente no funcionó. Leí en otro lugar para mover mi dll en el directorio '/ usr/lib' (sí, de hecho es un sistema de Linux) y que funcionó sin ninguna configuración adicional – Stefan

0

me encontré con este problema y resueltos con lo siguiente:

Hay una dependencia en msvcr90.dll si compila en/MD. Intenta compilar el código con/MT en su lugar.

Project properties>C/C++>Code Generation>Runtime Library: /MT

Cuestiones relacionadas