2012-08-06 7 views
7

Sto facendo un P/Invoke, e sto usando il seguente metodoDllImport, come controllare se la DLL è stata caricata?

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

anche se il suo lavoro, come è garantito che Authz.dll viene sempre caricato nel mio codice. Supponiamo che il mio dll sia un po 'di XXX.dll come dovrei controllare in generale se quella DLL è stata caricata o meno prima di usarla, in modo da non ottenere un'eccezione metodo non trovata.

+0

È possibile P/Invoke su loadlibrary e vedere se ciò riesce? http://www.pinvoke.net/default.aspx/kernel32.loadlibrary – rene

risposta

12

Marshal.PrelinkAll(Type)

o

Marshal.Prelink(MethodInfo)

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

Aggiornamento:

Purtroppo, la documentazione MSDN non riesce a ricordare tutte le eccezioni che sono gettati se la DLL è non trovato. Ho appena verificato tramite una semplice app che è effettivamente un lancio DllNotFoundException.

+0

Non lo sapevo. +1 –

+1

Cosa succede se il Prelink fallisce? Secondo i documenti non vi è alcun codice di errore o eccezione generata quando qualcosa non può essere risolto. –

+0

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