GetLastError is a number. What does it mean?

A customer asked


I'm getting an error 12 back from a GetLastError call, and I've seen a number of sites that tell me I can figure out what that error is by sending it to SysErrorMessage.  But nothing I've seen shows how to declare SysErrorMessage.  It doesn't appear to be in Kernal32 because I get an error if I try to DECLARE it there.  Where does this API live?



Understanding an error number from GetLastError() is probably useful. If you have Visual Studio installed, these errors are defined in

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\PlatformSDK\Include\WinError.h

For error 12, that files says:




// MessageText:


//  The access code is invalid.


#define ERROR_INVALID_ACCESS             12L



You can also start VS and choose Tools->Error Lookup


I haven’t heard of the “SysErrorMessage” function and a search of MSDN turns up nothing. There are a few mentions of it from internet searches. Perhaps it is outdated.


To turn an error number into English text, you can use the FormatMessage function. A parameter specifies what language the string should be. For that, we call GetSystemDefaultLangID





#define FORMAT_MESSAGE_FROM_STRING     0x00000400

#define FORMAT_MESSAGE_FROM_HMODULE    0x00000800

#define FORMAT_MESSAGE_FROM_SYSTEM     0x00001000




DECLARE integer GetSystemDefaultLangID IN win32api


DECLARE integer FormatMessage IN WIN32API integer dwFlags,;

      integer lpSource,;

      integer dwMessageId,;

      integer dwLanguageId,;

      string @ lpBuffer,;

      integer nSize






nlen=FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0,nErr,langid, @cstr, LEN(cstr))

IF nlen>0





Comments (5)

  1. msvista says:

    If one does not have an option to write FormatMessage, the link below (that I use normally) should also help to find what the meaing of each error code returned from GetLastError.

  2. Jonny says:

    You can also type ‘net helpmsg 12’ from the command prompt.

  3. Many Windows APIs can fail for various reasons. For example FormatMessage indicates failure by returning

  4. Bryan Kelly says:

    Good page.  Just what I needed.  Thanks for posting it.

Skip to main content