[ Team LiB ] |
17.1 Calling Into DLLsPInvoke, short for Platform Invocation Services, lets C# access functions, structs, and callbacks in unmanaged DLLs. For example, perhaps you wish to call the MessageBox function in the Windows DLL user32.dll: int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCation, UINT uType); To call this function, you can write a static extern method decorated with the DllImport attribute: using System.Runtime.InteropServices; class MsgBoxTest { [DllImport("user32.dll")] static extern int MessageBox(int hWnd, string text, string caption, int type); public static void Main( ) { MessageBox(0, "Please do not press this button again.", "Attention", 0); } } PInvoke then finds and loads the required Win32 DLLs and resolves the entry point of the requested function. The CLR includes a marshaler that knows how to convert parameters and return values between .NET types and unmanaged types. In this example the int parameters translate directly to four-byte integers that the function expects, and the string parameters are converted into null-terminated arrays of characters using one-byte ANSI characters under Win9x, or into two-byte Unicode characters under WinNT/Win2K. |
[ Team LiB ] |