FormatMessageで文字列が得られないエラーについて

解決


sato  2003-06-25 18:27:43  No: 51598  IP: [192.*.*.*]

FormatMessageを使用してGetLastErrorで得たエラーコードに対するメッセージを取得しているのですが、エラーコード 12031 は文字列が返ってきません。
(メッセージ定義として、システムメッセージテーブルリソースを指定しています。)
FormatMessageで文字列が得られないのはどんなエラーの場合なのでしょうか?
また、GetLastErrorで得たエラーコードの意味を知るにはどのような方法があるあるのでしょうか?

編集 削除
瀬戸っぷ  2003-06-25 18:47:38  No: 51599  IP: [192.*.*.*]

まず、何のAPIの使用でのエラー取得なのでしょうか?
その辺に解決の糸口が見つかるかもしれません。

とりあえず、12000でヘッダをGrepするとWININT.H内にそれらしいモノが発見できます。
#define INTERNET_ERROR_BASE 12000
またそこから見ていくと…
12031はERROR_INTERNET_CONNECTION_RESETとなっています。
Error LookupにモジュールとしてWININET.DLLを追加して12031で検索すると
「この Web ページのサーバーとの接続が切れました。」とでます。
上記はInternetAPIを使っている場合だけですが……

編集 削除
瀬戸っぷ  2003-06-26 10:12:12  No: 51600  IP: [192.*.*.*]

あう…

> とりあえず、12000でヘッダをGrepするとWININT.H内にそれらしいモノが発見できます。

WININET.Hの誤りです。

編集 削除
sato  2003-06-26 14:24:09  No: 51601  IP: [192.*.*.*]

瀬戸っぷさんありがとうございます。
使っているのは InternetAPI です。Error Lookup ではWININET.DLLを追加することでエラーメッセージを取得できました。

プログラムからメッセージを取得するにはどのようにするのでしょうか?

FormatMessage(  FORMAT_MESSAGE_FROM_SYSTEM,
    NULL,
  errCode,
          /*MAKELANGID(LANG_ENGLISH,SUBLANG_DEFAULT),*/0,
          szErr,
          1024,
          NULL  );

WININET.DLL を参照を指定させるようなことが必要だと思うのですが。。ご存知の方いらっしゃいましたら、ご教授願います。

編集 削除
sato  2003-06-26 14:27:32  No: 51602  IP: [192.*.*.*]

すみません、編集途中で送信してしましました。
上記のコードはメッセージを取得している部分のコードです。(コメントの部分がそのまま入ってしまいました。すみません。)

情報をお持ちの方よろしくお願いします。

編集 削除
瀬戸っぷ  2003-06-26 15:49:04  No: 51603  IP: [192.*.*.*]

とりあえず、下記のような方法で取れましたが…

  HMODULE hWininet = NULL;
  char szErrMes[MAX_PATH];

  hWininet = LoadLibrary("WININET.DLL");
  FormatMessage(FORMAT_MESSAGE_FROM_HMODULE, hWininet, 12031, 0, szErrMes, MAX_PATH, NULL);
  FreeLibrary(hWininet);

編集 削除
sato  2003-06-26 16:44:06  No: 51604  IP: [192.*.*.*]

瀬戸っぷさんありがとうございます。
できました。
FORMAT_MESSAGE_FROM_HMODULE と FORMAT_MESSAGE_FROM_SYSTEM の OR指定にしました。

助かりました。

編集 削除