The Win32® function GetLastError is used to get the error code for all of the Win32 Internet functions. If ERROR_INTERNET_EXTENDED_ERROR is returned, there is a string or buffer containing a verbose error message. Call the InternetGetLastResponseInfo function to retrieve the extended error text.
To get the error text for a normal Win32 Internet error, use the Win32 function FormatMessage, and pass it an HMODULE handle to the Wininet.dll using the Win32 function GetModuleHandle.
The following is an example of a function to handle Win32 Internet function errors.
BOOL WINAPI ErrorOut ( HWND hErr, DWORD dError, TCHAR * szCallFunc)
{
TCHAR szTemp[356] = "", *szBuffer=NULL, *szBufferFinal = NULL;
DWORD dwIntError , dwLength = 0;
char strName[256]="";
FormatMessage(FORMAT_MESSAGE_FROM_HMODULE,
GetModuleHandle("wininet.dll"),dError,0,
(LPSTR)strName,256,NULL);
wsprintf (szTemp, "%s error code: %d\nMessage: %s\n",
szCallFunc, dError, strName);
int response;
if (dError == ERROR_INTERNET_EXTENDED_ERROR)
{
InternetGetLastResponseInfo (&dwIntError, NULL, &dwLength);
if (dwLength)
{
if ( !(szBuffer = (TCHAR *) LocalAlloc ( LPTR, dwLength) ) )
{
lstrcat (szTemp, TEXT ( "Unable to allocate memory to display
Internet error code. Error code: ") );
lstrcat (szTemp, TEXT (_itoa (GetLastError(), szBuffer, 10) ) );
lstrcat (szTemp, TEXT ("\n") );
response = MessageBox(hErr, (LPSTR)szTemp,"Error",MB_OK);
return FALSE;
}
if (!InternetGetLastResponseInfo (&dwIntError, (LPTSTR) szBuffer,
&dwLength))
{
lstrcat (szTemp, TEXT ( "Unable to get Internet error. Error code: ") );
lstrcat (szTemp, TEXT (_itoa (GetLastError(), szBuffer, 10) ) );
lstrcat (szTemp, TEXT ("\n") );
response = MessageBox(hErr, (LPSTR)szTemp,"Error",MB_OK);
return FALSE;
}
if ( !(szBufferFinal = (TCHAR *) LocalAlloc ( LPTR,
(strlen (szBuffer) +strlen (szTemp) + 1) ) ) )
{
lstrcat (szTemp, TEXT ( "Unable to allocate memory. Error code: ") );
lstrcat (szTemp, TEXT (_itoa (GetLastError(), szBuffer, 10) ) );
lstrcat (szTemp, TEXT ("\n") );
response = MessageBox(hErr, (LPSTR)szTemp,"Error",MB_OK);
return FALSE;
}
lstrcpy (szBufferFinal, szTemp);
lstrcat (szBufferFinal, szBuffer);
LocalFree (szBuffer);
response = MessageBox(hErr, (LPSTR)szBufferFinal,"Error",MB_OK);
LocalFree (szBufferFinal);
}
}
else
{
response = MessageBox(hErr, (LPSTR)szTemp,"Error",MB_OK);
}
return response;
}