EXEにすると内部エラーの報告がおおざっぱになってしまうのを補助するスクリプト。
OnErrorFlagというフラグを利用、本体側ではonerrorを使用しないこと。
userdef.as内に埋め込んでもいいかも。
der.as// 内部エラー報告 詳細化 (DetailErrorReport)
// OnErrorFlagというフラグをグローバル空間にて使用しています。
#ifndef __DetailErrorReport__
#define __DetailErrorReport__
onerror goto *OnErrorFlag
goto *@f
#module
#deffunc derSetTitle str p1
sTitle = p1
return
#deffunc derSetURL str p1
sURL = p1
return
#deffunc derSetMail str p1
sAddress = p1
return
#deffunc derReport int p1, int p2, local sMessage
sMessage = {"プログラムの実行中にエラーを発見しました。プログラムは強制終了致します。
申し訳ありません。
プログラムの改善のため、以下のエラー情報を発行元にご報告ください。
*エラー情報
\tKind : "}
switch p1
case 1
sMessage += "システムエラーが発生しました"
swbreak
case 2
sMessage += "文法が間違っています"
swbreak
case 3
sMessage += "パラメータの値が異常です"
swbreak
case 4
sMessage += "計算式でエラーが発生しました"
swbreak
case 5
sMessage += "パラメータの省略はできません"
swbreak
case 6
sMessage += "パラメータの型が違います"
swbreak
case 7
sMessage += "配列の要素が無効です"
swbreak
case 8
sMessage += "有効なラベルが指定されていません"
swbreak
case 9
sMessage += "サブルーチンやループのネストが深すぎます"
swbreak
case 10
sMessage += "サブルーチン外でのreturnは無効です"
swbreak
case 11
sMessage += "repeat外でのloopは無効です"
swbreak
case 12
sMessage += "ファイルが見つからないか、無効な名前です"
swbreak
case 13
sMessage += "画像ファイルがありません"
swbreak
case 14
sMessage += "外部ファイル呼び出し中のエラーが発生しました"
swbreak
case 15
sMessage += "計算式でカッコの記述が違います"
swbreak
case 16
sMessage += "パラメータの数が多すぎます"
swbreak
case 17
sMessage += "文字列式で扱える文字数を超えました"
swbreak
case 18
sMessage += "代入できない変数名を指定しています"
swbreak
case 19
sMessage += "0で除算しました"
swbreak
case 20
sMessage += "バッファオーバーフローが発生しました"
swbreak
case 21
sMessage += "サポートされない機能を選択しました"
swbreak
case 22
sMessage += "計算式のカッコが深すぎます"
swbreak
case 23
sMessage += "変数名が指定されていません"
swbreak
case 24
sMessage += "整数以外が指定されています"
swbreak
case 25
sMessage += "配列の要素書式が間違っています"
swbreak
case 26
sMessage += "メモリの確保ができませんでした"
swbreak
case 27
sMessage += "タイプの初期化に失敗しました"
swbreak
case 28
sMessage += "関数に引数が設定されていません"
swbreak
case 29
sMessage += "スタック領域のオーバーフローが発生しました"
swbreak
case 30
sMessage += "無効な名前がパラメーターに指定されています"
swbreak
case 31
sMessage += "異なる型を持つ配列変数に代入しました"
swbreak
case 32
sMessage += "関数のパラメーター記述が不正です"
swbreak
case 33
sMessage += "オブジェクト数が多すぎます"
swbreak
case 34
sMessage += "配列・関数として使用できない型です"
swbreak
case 35
sMessage += "モジュール変数が指定されていません"
swbreak
case 36
sMessage += "モジュール変数の指定が無効です"
swbreak
case 37
sMessage += "変数型の変換に失敗しました"
swbreak
case 38
sMessage += "外部DLLの呼び出しに失敗しました"
swbreak
case 39
sMessage += "外部オブジェクトの呼び出しに失敗しました"
swbreak
case 40
sMessage += "関数の戻り値が設定されていません"
swbreak
default
sMessage += "未知のエラーです"
swend
sMessage += "(Error No. " + str(p1) + ")\n\tLine : " + str(p2)
if (sURL != "")|(sAddress != "") {
// URL またはアドレスが設定されている場合
sMessage += "\n\n*連絡先"
}
if sURL != "" {
sMessage += "\n\tURL : " + sURL
}
if sAddress != "" {
sMessage += "\n\tMail : " + sAddress
}
if sTitle = "" {
sTitle = "エラー"
} else {
sTitle = "エラー - " + sTitle
}
dialog sMessage, 1, sTitle
return
#global
*OnErrorFlag
onerror 0
derReport wparam, lparam
end
*@
derSetTitle ""
derSetURL ""
derSetMail ""
#endif
/* [sample]
derSetTitle "サンプルツール 人柱版"
derSetURL "http://www.sample.hsp/"
derSetMail "master@sample.hsp"
derReport 11, 0
end
*/
2007年5月29日火曜日
内部エラー報告詳細化スクリプト
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿