2011-01-09 19 views
6

Quiero importar el archivo DLL en mi proyecto de sitio web. Tengo archivo DLL "my.dll" en la carpeta C: \ DLLDir y estoy usando el código:Asp.Net C# DllImport problema

[DllImport("C:\\DLLDir\\my.dll", EntryPoint = "Out32")] 

Esto funciona bien. Pero quiero usar la ruta relativa (ruta raíz de sitio web). Estoy tratando de poner "my.dll" en "bin" o carpeta raíz y estoy usando el código:

[DllImport("my.dll", EntryPoint = "Out32")] 

pero estoy consiguiendo el error: No se puede cargar DLL 'my.dll' : El módulo especificado no se pudo encontrar. (Excepción de HRESULT: 0x8007007E)

¿Alguna idea?

+1

Creo que quiere la ruta absoluta a la dll. Server.MapPath debería hacer el truco para usted –

+0

Server.MapPath le da las rutas relativas a la ubicación de su directorio web. Entonces, si ya tienes el camino absoluto, no habrá ninguna diferencia. –

+1

Pero Server.MapPath permitirá al OP utilizar una ruta relativa a la DLL, pero pasará una ruta absoluta a DLLImport. –

Respuesta

3

creo que es posible que desee echa un vistazo a los siguientes SO cuestión en primer lugar (ya que está relacionado con su caso):

DllImport failed to locate DLL even though it is in the PATH

Como otras personas han sugerido, compruebe la variable PATH entorno para asegurarse de que C:\DLLDir\ está allí. Puede leer más sobre cómo configurar sus variables de entorno here.

Consulte también MSDN forum post (parece que hubo un problema con las dependencias).

Si es una DLL COM que está importando, entonces también podría ser necesario registrarla primero en una máquina de destino (aunque no estoy seguro si esto es necesario). Read more here.

2

O bien no copió my.dll en la carpeta Bin donde debe cargarse. El uso de Process Explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx) probablemente mostrará de dónde trata de cargar este archivo.

EDITAR: gracias a volpav para recordarle que no está administrado DLL - ignore la porción gestionada ... ... el ensamblado tiene otras dependencias. Consulte http://blogs.msdn.com/b/suzcook/archive/2003/05/29/57120.aspx que detalla la investigación de tales fallas (busque "ensamblar el registro de fusiones de carga" para ver más enlaces).

+2

Creo que no tiene nada que ver con Fusion ya que es una DLL no administrada. – volpav

0

Creo que la DLL debe estar en su ruta (si no es absoluta). Y lo que probablemente lo sorprenda es que CWD no está en su camino a menos que agregue específicamente "." en tu variable PATH.

2

Vaya a la pestaña Properties/Build y configure el objetivo de la plataforma en x86.

Cuestiones relacionadas