Windows C# Tutorial

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