// using System.Runtime.InteropServices; [ DllImport( "kernel32.dll", CharSet = CharSet.Auto/*, SetLastError = true */ ) ] private static extern uint FormatMessage ( uint dwFlags, IntPtr lpSource, uint dwMessageId, uint dwLanguageId, ref IntPtr lpBuffer, uint nSize, IntPtr Arguments ); public string GetLastWin32ErrorMessage( ) { return GetLastWin32ErrorMessage( Marshal.GetLastWin32Error( ) ); } public string GetLastWin32ErrorMessage( int errorCode ) { IntPtr buffer = IntPtr.Zero; uint cnt = FormatMessage ( 0x00000100 | // FORMAT_MESSAGE_ALLOCATE_BUFFER 0x00000200 | // FORMAT_MESSAGE_IGNORE_INSERTS 0x00001000, // FORMAT_MESSAGE_FROM_SYSTEM IntPtr.Zero, ( uint )errorCode, 0, // LANGIDs : Neutral, Thread, User, System, en-US ref buffer, 0, IntPtr.Zero ); if ( cnt == 0 || buffer == IntPtr.Zero ) return String.Format( "Unknown error: {0}.", errorCode ); string errorMessage = Marshal.PtrToStringAuto( buffer, ( int )cnt ); Marshal.FreeHGlobal( buffer ); // LocalFree. return errorMessage; }
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.