goo

システムエラーメッセージ取得

システムエラーの取得
用途
	デバッグでのエラーメッセージ取得。
	特定のシステムエラーの数値からメッセージ取得。

サンプル
/* modGetError ---------------------------------------------------
 *	GetError		Win32 API GetLastError()の戻り値取得
 *	GetErrorStr	現在のエラーメッセージの文字列取得
 *	GetErrorStr2	任意のエラーメッセージの文字列取得
 */
#module modGetError

#uselib "kernel32.dll"
#cfunc FormatMessage "FormatMessageA" int,int,int,int,var,int,int
#cfunc GetLastError  "GetLastError"

#defcfunc GetError
	return GetLastError()

/*	int	e		任意のエラーメッセージの値
 *	int	bMaxWidth	メッセージの改行: 0 無視: 1 
 */
#defcfunc GetErrorStr2 int e, int bMaxWidth
	sdim strErr,260 : ret = 0x1200
	if( bMaxWidth ) : ret = 0x12ff
	ret = FormatMessage(ret, 0, e, 0, strErr, 260, 0)
	return strErr

#defcfunc GetErrorStr
	return GetErrorStr2( GetLastError(), 1)

#global
/* end of module ----------------------------------------------- */

#uselib "user32.dll"
#cfunc GetWindowLong "GetWindowLongA" int,int
#func SetWindowLong "SetWindowLongA" int,int,int

*main
	// 0~2000のエラーメッセージを取得
	sdim bufErr, 15000
	repeat 2000
		strTmp = GetErrorStr2(cnt, 0)
		if(strTmp != "" ) : bufErr += strf("%04d : ", cnt) + strTmp
	loop

	screen 0, 360, 100 : title "0~2000のエラーメッセージを表示"
	font "", 12 : objmode 2
	pos 10, 14 : mes "エラー番号:"
	e = "" : pos 80, 10 : input e, 60, 20
	SetWindowLong objinfo(0,2), -16, GetWindowLong(objinfo(0,2), -16) | 0x2002
	pos 160, 10 : objsize 180,20 : button "エラーメッセージ取得", *GetErrorMessage
	pos 0, 40 : mesbox bufErr, 360, 60, 0
	stop

*GetErrorMessage
	title "" + int(e) + "のエラーメッセージを表示"
	objprm 2, GetErrorStr2(int(e), 0) : objprm 0, ""
	stop


コメント ( 0 ) | Trackback ( 0 )
« HSPプログラム... oncmd »
 
コメント
 
コメントはありません。
コメントを投稿する
 
名前
タイトル
URL
コメント
コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。