Mega Code Archive

 
Categories / C# Tutorial / Windows
 

Marshal a function from Dll to a delegate

using System; using System.Threading; using System.Runtime.InteropServices; using System.Collections.Generic; using System.Text;     class Program     {         [DllImport("kernel32.dll")]         static extern IntPtr LoadLibrary(string dllName);         [DllImport("kernel32.dll")]         static extern IntPtr GetProcAddress(IntPtr hModule, string procName);         delegate int MessageBoxDelegate(IntPtr hwnd,             [MarshalAs(UnmanagedType.LPWStr)]string text,             [MarshalAs(UnmanagedType.LPWStr)]string caption,             int type);         static void Main(string[] args)         {             IntPtr userApi = LoadLibrary("user32.dll");             IntPtr msgBoxAddress = GetProcAddress(userApi, "MessageBoxW"); // unicode (wide) message box             MessageBoxDelegate mbd = (MessageBoxDelegate)Marshal.GetDelegateForFunctionPointer(msgBoxAddress,typeof(MessageBoxDelegate));             mbd(IntPtr.Zero, "A", "B", 0);             DoSomething(mbd);         }         static void DoSomething(MessageBoxDelegate mbd)         {             mbd(IntPtr.Zero, "Work completed.", "Work Progress", 0);         }     }