Last Update: Jan.28,2006

C Source Library

「Borland C++ 5.5」でコンパイル出来ます。

■ エラーコードの内容を Excel 用 CSV 形式ファイルで出力

/*
 *  winerror.c : エラーコードの内容を
 *               Excel 用 CSV 形式ファイルで出力
 *
 *      Copyright (c) 2006 AOK. 
 *  
 *      2006/01/27 - 初版
 *
 */

#include <windows.h>
#include <stdio.h>

#define MIN_ERROR_NO    0
#define MAX_ERROR_NO    11999
#define OUTPUT_FILENAME "winerror.csv"

void MakeCsvFormat(LPTSTR lpBuf)
{
    LPTSTR lpSave, lpSrc;

    lpSave = strdup(lpBuf);
    lpSrc = lpSave;
    while (*lpSrc != '\0') {
        if (*lpSrc == '"') {
            *lpBuf++ = '"';
            *lpBuf++ = '"';
        } else if (*lpSrc != '\r') {
            *lpBuf++ = *lpSrc;
        }
        ++lpSrc;
    }
    *lpBuf-- = '\0';
    while (*lpBuf == '\n' || *lpBuf == ' ')
        *lpBuf-- = '\0';
    free(lpSave);
}

int main()
{
    LPVOID lpMsgBuf;
    DWORD dwNo, dwCount = 0, dwMax = MIN_ERROR_NO;
    int nLen = 0, nLenNew;
    TCHAR lpBuf[500];
    FILE *fp;

    if ((fp = fopen(OUTPUT_FILENAME, "wb")) == NULL) {
        puts("ファイルをオープン出来ません。");
        return 1;
    }
    printf("書き出し中 ");
    for (dwNo = MIN_ERROR_NO; dwNo <= MAX_ERROR_NO; dwNo++) {
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER |
            FORMAT_MESSAGE_FROM_SYSTEM |
            FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL, dwNo, 
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR) &lpMsgBuf, 0, NULL);
        if (lpMsgBuf != NULL) {
            nLenNew = lstrlen((LPCTSTR)lpMsgBuf);
            if (nLenNew > nLen) {
                nLen = nLenNew;
                dwMax = dwNo;
            }
            strcpy(lpBuf, (LPCTSTR)lpMsgBuf);
            MakeCsvFormat(lpBuf);
            fprintf(fp, "%lu,\"%s\"\r\n", dwNo, lpBuf);
        }
        if (dwCount++ % 1000 == 0) putchar('.');
        LocalFree(lpMsgBuf);
    }
    fclose(fp);

    printf("\n出力を完了しました。");
    printf("最長 %ld バイト(%lu)\n", nLen, dwMax);

    return 0;
}