LoadLibrary (kernel32)
Last changed: -

The LoadLibrary API maps the specified DLL file into the address space of the calling process.

C# Signature:

[DllImport("kernel32", SetLastError=true, CharSet = CharSet.Ansi)]
static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)]string lpFileName);

VB.NET Signature:

<DllImport("kernel32.dll", SetLastError:=True), CharSet:=CharSet.Ansi> _
Public Shared Function LoadLibrary(ByVal lpFileName As String) As IntPtr
End Function

VB Signature:

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpFileName As String) As IntPtr

User-Defined Types:




Tips & Tricks:

public static IntPtr LoadWin32Library(string libPath)
   if (String.IsNullOrEmpty(libPath))
      throw new ArgumentNullException("libPath");
   if (Environment.Is64BitProcess)
      throw new Exception(String.Format("Can't load {0} because this is a 64 bit proccess", libPath));

   IntPtr moduleHandle = LoadLibrary(libPath);
   if (moduleHandle == IntPtr.Zero)
       var lasterror = Marshal.GetLastWin32Error();
       var innerEx = new Win32Exception(lasterror);
       innerEx.Data.Add("LastWin32Error", lasterror);

       throw new Exception("can't load DLL " + libPath, innerEx);
   return moduleHandle;

Sample Code:

private void LoadDll() {
   hExe = LoadLibrary(mFileName);
   if (hExe == IntPtr.Zero) {
     throw new System.ComponentModel.Win32Exception("Cannot load " + mFileName);
   // etc..

Alternative Managed API:

Do you know one? Please contribute it!

LoadLibrary on MSDN