[DllImport("kernel32")]
public extern static IntPtr LoadLibrary(string lpLibFileName);
[DllImport("kernel32")]
public extern static bool FreeLibrary(IntPtr hLibModule);
[DllImport("kernel32", CharSet = CharSet.Ansi)]
public extern static IntPtr GetProcAddress(IntPtr hModule, string lpProcName);
public delegate int MessageBox(IntPtr hWnd, string text, string caption, int type);
public static int InvokeMessageBox(IntPtr hWnd, string text, string caption, int type)
{
int result = -1;
IntPtr hModule = LoadLibrary("user32.dll");
IntPtr msgBoxPtr = GetProcAddress(hModule, "MessageBoxA");
MessageBox fnMsgBox = Marshal.GetDelegateForFunctionPointer(msgBoxPtr, typeof(MessageBox)) as MessageBox;
result = fnMsgBox(hWnd, text, caption, type);
FreeLibrary(hModule);