次の方法で共有


エラー メッセージの取得

メソッド呼び出しでエラーが発生すると、多くの関数からエラー コードが返されます。 エラー コードを返すほとんどの Certificate Services インターフェイスと API 要素では、NULL モジュール ハンドルを使用して FormatMessage を呼び出すことでエラー メッセージ テキストを取得できます。 FormatMessage が成功しない場合は、バックアップ API 要素またはデータベース関連のエラーが発生した可能性が高いエラー コードです。Ntdsbmsg.dll ライブラリに対応するモジュール ハンドルを使用して FormatMessage を呼び出すと、エラー メッセージ テキストが取得されます。 次の例は、Certificate Services アプリケーションでエラー メッセージ テキストを取得する方法を示しています。

#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." );

}