2012-08-06 25 views
7

que estoy haciendo un P/Invoke, y estoy usando el siguiente métodoDllImport, ¿cómo verificar si la DLL está cargada?

[DllImport("Authz.dll", SetLastError = true)] 
    public static extern BOOL AuthzFreeContext(
     IntPtr phAuthzResourceManager); 

pesar de que su trabajo, ¿Cómo se garantiza que Authz.dll siempre se carga en mi código. Supongamos que mi dll es un XXX.dll, ¿cómo debo verificar en general si ese dll está cargado o no antes de usar eso, por lo que no obtengo una excepción de método no encontrado.

+0

Puede P/Invocar en loadlibrary y ver si eso tiene éxito? http://www.pinvoke.net/default.aspx/kernel32.loadlibrary – rene

Respuesta

12

Marshal.PrelinkAll(Type)

o

Marshal.Prelink(MethodInfo)

Ver: http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.prelinkall(v=vs.100).aspx

Actualización:

Lamentablemente, la documentación de MSDN no menciona ninguna excepción se produce si el archivo DLL es extraviado. Acabo de verificar a través de una aplicación simple que de hecho es un DllNotFoundException siendo lanzado.

+0

No sabía esto. +1 –

+1

¿Qué sucede si falla Prelink? De acuerdo con los documentos, no hay ningún código de error o excepción lanzada cuando algo no se pudo resolver. –

+0

@AloisKraus: 'DllNotFoundException' IIRC (o alguna' IOException'). – leppie

Cuestiones relacionadas