擷取網路錯誤
WNet 函式會傳回錯誤碼,以便與 Windows for Workgroups 相容。 每個 WNet 函式也會設定 GetLastError傳回的錯誤碼值。
當其中一個 WNet 函式傳回ERROR_EXTENDED_ERROR時,應用程式可以呼叫 WNetGetLastError 函式來擷取錯誤的其他資訊。 此資訊通常專屬於網路提供者。
下列範例說明應用程式定義的錯誤處理函式 (NetErrorHandler) 。 函式採用三個引數:視窗控制碼、其中一個 WNet 函式傳回的錯誤碼,以及產生錯誤的函式名稱。 如果錯誤碼ERROR_EXTENDED_ERROR,NetErrorHandler 會呼叫 WNetGetLastError 以取得擴充的錯誤資訊並列印資訊。 此範例會呼叫 MessageBox 函式來處理訊息。
#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "mpr.lib")
#pragma comment(lib, "user32.lib")
BOOL WINAPI NetErrorHandler(HWND hwnd,
DWORD dwErrorCode,
LPSTR lpszFunction)
{
DWORD dwWNetResult, dwLastError;
CHAR szError[256];
CHAR szCaption[256];
CHAR szDescription[256];
CHAR szProvider[256];
// The following code performs standard error-handling.
if (dwErrorCode != ERROR_EXTENDED_ERROR)
{
sprintf_s((LPSTR) szError, sizeof(szError), "%s failed; \nResult is %ld",
lpszFunction, dwErrorCode);
sprintf_s((LPSTR) szCaption, sizeof(szCaption), "%s error", lpszFunction);
MessageBox(hwnd, (LPSTR) szError, (LPSTR) szCaption, MB_OK);
return TRUE;
}
// The following code performs error-handling when the
// ERROR_EXTENDED_ERROR return value indicates that the
// WNetGetLastError function can retrieve additional information.
else
{
dwWNetResult = WNetGetLastError(&dwLastError, // error code
(LPSTR) szDescription, // buffer for error description
sizeof(szDescription), // size of error buffer
(LPSTR) szProvider, // buffer for provider name
sizeof(szProvider)); // size of name buffer
//
// Process errors.
//
if(dwWNetResult != NO_ERROR) {
sprintf_s((LPSTR) szError, sizeof(szError),
"WNetGetLastError failed; error %ld", dwWNetResult);
MessageBox(hwnd, (LPSTR) szError, "WNetGetLastError", MB_OK);
return FALSE;
}
//
// Otherwise, print the additional error information.
//
sprintf_s((LPSTR) szError, sizeof(szError),
"%s failed with code %ld;\n%s",
(LPSTR) szProvider, dwLastError, (LPSTR) szDescription);
sprintf_s((LPSTR) szCaption, sizeof(szCaption), "%s error", lpszFunction);
MessageBox(hwnd, (LPSTR) szError, (LPSTR) szCaption, MB_OK);
return TRUE;
}
}