2012-08-06 126 views
7

我做的P/Invoke,和我使用下面的方法DllImport,如何檢查DLL是否被加載?

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

即使它的工作,它是如何保證Authz.dll總是加載到我的代碼。假設我的dll是一些XXX.dll我應該如何檢查一般,如果該dll被加載或沒有使用之前,以便我沒有找到一個方法沒有發現異常。

+0

你可以在loadlibrary上進行P/Invoke,看看是否成功? http://www.pinvoke.net/default.aspx/kernel32.loadlibrary – rene 2012-08-06 11:58:14

回答

12

Marshal.PrelinkAll(Type)

Marshal.Prelink(MethodInfo)

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

更新:

可悲的是,MSDN文檔沒有提到被拋出任何異常如果DLL未找到。我剛剛通過一個簡單的應用程序驗證,它確實是一個DllNotFoundException被拋出。

+0

不知道這一個。 +1 – 2012-08-06 12:11:14

+1

如果Prelink確實失敗會發生什麼?根據文檔,當無法解決某些問題時,不會出現錯誤代碼或異常。 – 2012-08-06 12:31:07

+0

@AloisKraus:'DllNotFoundException' IIRC(或某個'IOException')。 – leppie 2012-08-06 12:55:39