2012-08-06 125 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