2012-08-06 14 views
7

Ich mache ein P/Invoke, und ich bin die folgende MethodeDllImport, wie überprüft man, ob die DLL geladen ist?

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

obwohl seine Arbeits verwenden, wie es garantiert ist, dass Authz.dll immer in meinen Code geladen wird. Angenommen, meine dll ist etwas XXX.dll Wie sollte ich im Allgemeinen überprüfen, ob diese DLL geladen ist oder nicht, bevor Sie das verwenden, so dass ich keine Ausnahme nicht gefunden Methode nicht gefunden.

+0

Sie können P/Invoke auf loadlibrary und sehen, ob das gelingt? http://www.pinvoke.net/default.aspx/kernel32.loadlibrary – rene

Antwort

12

Marshal.PrelinkAll(Type)

oder

Marshal.Prelink(MethodInfo)

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

Update:

Leider die MSDN-Dokumentation Ausnahmen, wenn die DLL ausgelöst wird nicht erwähnt ist nicht gefunden. Ich habe gerade über eine einfache App verifiziert, dass es tatsächlich ein DllNotFoundException Werbespot ist.

+0

Ich kannte dieses nicht. +1 –

+1

Was passiert, wenn Prelink fehlschlägt? Laut der Dokumentation gibt es keinen Fehlercode oder Ausnahmefehler, wenn etwas nicht gelöst werden konnte. –

+0

@AloisKraus: 'DllNotFoundException' IIRC (oder einige 'IOException'). – leppie

Verwandte Themen