Bagikan melalui


Mengambil Kesalahan Jaringan

Fungsi WNet mengembalikan kode kesalahan untuk kompatibilitas dengan Windows untuk Grup Kerja. Setiap fungsi WNet juga mengatur nilai kode kesalahan yang dikembalikan oleh GetLastError.

Ketika salah satu fungsi WNet mengembalikan ERROR_EXTENDED_ERROR, aplikasi dapat memanggil fungsi WNetGetLastError untuk mengambil informasi tambahan tentang kesalahan tersebut. Informasi ini biasanya khusus untuk penyedia jaringan.

Contoh berikut mengilustrasikan fungsi penanganan kesalahan yang ditentukan aplikasi (NetErrorHandler). Fungsi ini mengambil tiga argumen: handel jendela, kode kesalahan yang dikembalikan oleh salah satu fungsi WNet, dan nama fungsi yang menghasilkan kesalahan. Jika kode kesalahan ERROR_EXTENDED_ERROR, NetErrorHandler memanggil WNetGetLastError untuk mendapatkan informasi kesalahan yang diperluas dan mencetak informasi. Sampel memanggil fungsi MessageBox untuk memproses pesan.

#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; 
    } 
}