17.1 Calling Into DLLs

PInvoke, 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.



C# in a Nutshell
C # in a Nutshell, Second Edition
ISBN: 0596005261
EAN: 2147483647
Year: 2005
Pages: 963

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net