loadlibraryex (kernel32)
Last changed: -216.2.86.11

.
Summary

C# Signature:

[DllImport("kernel32.dll", SetLastError = true)]
static extern IntPtr LoadLibraryEx(string lpFileName, IntPtr hReservedNull, LoadLibraryFlags dwFlags);

VB.NET Signature:

<DllImport("kernel32.dll")> _
Private Shared Function LoadLibraryEx(lpFileName As String, hReservedNull As IntPtr, dwFlags As LoadLibraryFlags) As IntPtr
End Function

User-Defined Types:

LoadLibraryFlags

Notes:

None.

Tips & Tricks:

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.

Sample Code:

[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);
}

Alternative Managed API:

Do you know one? Please contribute it!

Documentation