[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags);
<DllImport("kernel32.dll")> _
Private Shared Function LoadLibraryEx(lpFileName As String, hReservedNull As IntPtr, dwFlags As LoadLibraryFlags) As IntPtr
End Function
None.
If you only want to load resources from the library, specify LoadLibraryFlags.LoadLibraryAsDatafile as dwFlags. In this case, nothing is done to execute or prepare to execute the mapped file.
[System.Runtime.InteropServices.DllImport("kernel32.dll", SetLastError = true)]
private static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hFile, uint dwFlags);
private static void LoadWin32Library(string libPath)
{
System.IntPtr moduleHandle = LoadLibraryEx(libPath, IntPtr.Zero, 0);
if (moduleHandle == IntPtr.Zero)
throw new Win32Exception(Marshal.GetLastWin32Error());
}
Safe handle implementation for Libraries
using System.Runtime.InteropServices;
class NativeLibraryHandle : SafeHandle
{
public NativeLibraryHandle(string filename, LoadLibraryFlags flags) : base(IntPtr.Zero, true)
{
base.SetHandle(LoadLibraryEx(filename, IntPtr.Zero, flags));
}
public override bool IsInvalid
{
get { return this.handle == IntPtr.Zero; }
}
protected override bool ReleaseHandle()
{
return FreeLibrary(this.handle);
}
[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags);
[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FreeLibrary(IntPtr hModule);
}
Do you know one? Please contribute it!