/// <summary>
 /// Initializes a new instance of the <see cref="NativeLibrary"/> class.
 /// </summary>
 /// <param name="fileName">full path name of dll to load</param>
 /// <exception cref="System.IO.FileNotFoundException">
 /// If fileName can't be found
 /// </exception>
 /// <remarks>
 /// This constructor loads a DLL and makes this class responible for 
 /// freeing it. Throws exceptions on failure. Most common failure would be 
 /// file-not-found, or that the file is not a loadable image.
 /// </remarks>
 public NativeLibrary(string fileName)
 {
     this.libraryHandle = NativeMethods.LoadLibrary(fileName);
     if (this.libraryHandle.IsInvalid)
     {
         int hr = Marshal.GetHRForLastWin32Error();
         Marshal.ThrowExceptionForHR(hr);
     }
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="NativeLibrary"/> class.
 /// </summary>
 /// <param name="fileName">full path name of dll to load</param>
 /// <exception cref="System.IO.FileNotFoundException">
 /// If fileName can't be found
 /// </exception>
 /// <remarks>
 /// This constructor loads a DLL and makes this class responible for
 /// freeing it. Throws exceptions on failure. Most common failure would be
 /// file-not-found, or that the file is not a loadable image.
 /// </remarks>
 public NativeLibrary(string fileName)
 {
     this.libraryHandle = NativeMethods.LoadLibrary(fileName);
     if (this.libraryHandle.IsInvalid)
     {
         int hr = Marshal.GetHRForLastWin32Error();
         Marshal.ThrowExceptionForHR(hr);
     }
 }
 internal static extern IntPtr GetProcAddress(NativeLibrarySafeHandle hModule, [MarshalAs(UnmanagedType.LPStr)] string procName);
 internal static extern IntPtr GetProcAddress(NativeLibrarySafeHandle hModule, [MarshalAs(UnmanagedType.LPStr)]string procName);