Bagikan melalui


Mengambil Pesan Kesalahan

Ketika panggilan metode menghasilkan kesalahan, banyak fungsi mengembalikan kode kesalahan. Untuk sebagian besar antarmuka Layanan Sertifikat dan elemen API yang mengembalikan kode kesalahan, teks pesan kesalahan dapat diambil dengan memanggil FormatMessage dengan handel modul NULL . Jika FormatMessage tidak berhasil, kode kesalahan kemungkinan besar dihasilkan dari elemen API cadangan atau kesalahan terkait database; memanggil FormatMessage dengan handel modul yang sesuai dengan pustaka Ntdsbmsg.dll harus mengambil teks pesan kesalahan. Contoh berikut menunjukkan cara mengambil teks pesan kesalahan dalam aplikasi Layanan Sertifikat.

#include <windows.h>
#include <stdio.h>
// Display error message text, given an error code.
// Typically, the parameter passed to this function is retrieved
// from GetLastError().
void PrintCSBackupAPIErrorMessage(DWORD dwErr)
{

    WCHAR   wszMsgBuff[512];  // Buffer for text.

    DWORD   dwChars;  // Number of chars returned.

    // Try to get the message from the system errors.
    dwChars = FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM |
                             FORMAT_MESSAGE_IGNORE_INSERTS,
                             NULL,
                             dwErr,
                             0,
                             wszMsgBuff,
                             512,
                             NULL );

    if (0 == dwChars)
    {
        // The error code did not exist in the system errors.
        // Try Ntdsbmsg.dll for the error code.

        HINSTANCE hInst;

        // Load the library.
        hInst = LoadLibrary(L"Ntdsbmsg.dll");
        if ( NULL == hInst )
        {
            printf("cannot load Ntdsbmsg.dll\n");
            exit(1);  // Could 'return' instead of 'exit'.
        }

        // Try getting message text from ntdsbmsg.
        dwChars = FormatMessage( FORMAT_MESSAGE_FROM_HMODULE |
                                 FORMAT_MESSAGE_IGNORE_INSERTS,
                                 hInst,
                                 dwErr,
                                 0,
                                 wszMsgBuff,
                                 512,
                                 NULL );

        // Free the library.
        FreeLibrary( hInst );

    }

    // Display the error message, or generic text if not found.
    printf("Error value: %d Message: %ws\n",
            dwErr,
            dwChars ? wszMsgBuff : L"Error message not found." );

}