« ICU を使う | メイン | 引数の個数 »

2008年01月11日

ツール開発メモ:: エラーコードを調べる

    

このエラーコードは何かなと、調べたい時がままある。
だいたい grep とかしていたけど、コマンドラインでエラーコード打ったら返してくれるのがあればいいんだと思って作った。
以下のような感じ。
Windows のエラーと DirectX 9 のエラーコードを文字列にして表示してくれる。
たぶん、DirectX 9が入っていないと起動しない。

#include <stdio.h>
#include <windows.h>
#include <sstream>
#include <string>
#include <dxerr9.h>

#pragma comment(lib,"dxerr9.lib")

int main( int argc, char* argv[] )
{
  if( argc < 2 ) {
    printf( "usage:\n" );
    printf( argv[0] );
    printf( " [error code]\n" );
    printf( "\n" );
    printf( "ex.\n" );
    printf( "whaterror 0x01234567\n" );
  } else if( argv[1] ) {
    std::string    valstr( argv[1] );
    unsigned long  errorCode;
    std::stringstream stream( valstr, std::ios::in );
    stream >> std::hex >> errorCode;

    LPVOID lpMsgBuf;
    FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
            NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lpMsgBuf, 0, NULL );
    if( lpMsgBuf ) {
      printf( (LPCTSTR)lpMsgBuf );
    } else {
      const char* dxErrStr = DXGetErrorString9( errorCode );
      const char* dxErrDesc = DXGetErrorDescription9( errorCode );
      if( dxErrStr ) printf( "%s\n", dxErrStr );
      if( dxErrDesc ) printf( "%s\n", dxErrDesc );
    }
    LocalFree(lpMsgBuf);
  }
}


他の人に聞くと、エラーコードでググるとか。
そっちのが楽かも。
whaterror.zip に置いておくので、気が向いたら使ってください。
パスが通っているところにおいておくと、すぐに使える。
16進数かどうか判定して、10進数でも使えるともう少し便利になるかも。



投稿者 Takenori : 2008年01月11日 19:53




comments powered by Disqus
Total : Today : Yesterday : なかのひと