19.3 実行および解析時のメッセージ
ここでは、AITファイル解析時および実行時に表示されるメッセージを示します。これらのメッセージは、アウトプットウィンドウに表示されます。
-
AITCE-0001
<トークン1>は予期しないものです。<トークン2>は見つかりません。
- 要因
-
無効なキーワードまたはシンボル<トークン1>が検出されました。スクリプト解析では、キーワードまたはシンボル<トークン2>を予期しています。
- 対処
-
必要に応じて<トークン2>を追加してください。
- 例
-
- 誤った指定例
DEFINE { const integer OK_END = 0; const integer NG_END = -1 // 「;」が指定されていません const integer sloop_max = 30; }
- 正しい指定例
DEFINE { const integer OK_END = 0; const integer NG_END = -1; // 「;」を追加しました const integer sloop_max = 30; }
-
AITCE-0002
<トークン>は予期しないものです。
- 要因
-
無効なキーワードまたはシンボル<トークン>が検出されました。
- 対処
-
予期されないキーワードまたはシンボルを削除してください。
- 例
-
- 誤った指定例
DEFINE { integer OK_END = 0; integer sloop_max = 0;; // 「;」が2つ指定されています }
変数「sloop_max」に「;」が2つ指定されています。
- 正しい指定例
DEFINE { integer OK_END = 0; integer sloop_max = 0; // 「;」を削除しました }
変数「sloop_max」の「;」を1つ削除しました。
-
AITCE-0003
関数名を識別子名として使用しています。
- 要因
-
関数名は識別子として使用できません。
- 対処
-
識別子名を変更してください。
- 例
-
- 誤った指定例
DEFINE { integer AIT_LogMessage = 10; }
変数名に関数名が使用されています。
- 正しい指定例
DEFINE { integer AIT_LogMessageNumber = 10; }
変数名を「AIT_LogMessageNumber」に変更しました。
-
AITCE-0005
階層数が255を超えています。
- 要因
-
AITファイル内で構造体の階層レベルが最大値の255を超えています。
- 対処
-
if、if-else、do-while、whileまたはswitch構造体の階層レベルが最大値の255を超えると、AITファイルの解析ができなくなります。AITファイルを再編集し、構造体の階層レベルのネストを浅くしてください。
-
AITCE-0006
識別子名が64文字を超えています。
- 要因
-
各識別子名に使用できる最大文字数は64です。この最大文字数を超える識別子名がAITファイルに存在します。
- 対処
-
識別子名は1〜64文字で指定してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 0; integer sample123456sample123456sample123456sample123456sample123456sample = 0; // 66文字で変数名が指定されています }
2番目に定義した変数名が最大文字数を超えています。
- 正しい指定例
DEFINE { integer sloop_max = 0; integer sample123456 = 0; // 64文字以内で変数名を指定しました }
2番目に定義した変数名を最大文字数内で指定しました。
-
AITCE-0007
文字列定数が複数列にわたっています。
- 要因
-
最初の行が\nで終わっているため、文字列定数が2行目に続いています。
- 対処
-
文字列定数は1行で指定してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 0; string SoftwareName = " My Setup"; // 文字列定数が2行目に続いています }
変数「SoftwareName」の文字列定数が2行目に続いています。
- 正しい指定例
DEFINE { integer sloop_max = 0; string SoftwareName = " My Setup"; // 文字列定数を1行で指定しました }
変数「SoftwareName」の文字列定数を1行で指定しました。
-
AITCE-0008
エスケープシーケンスの使用方法が誤っています。
- 要因
-
実行時に指定されたAITファイルの文字列定数に、誤ったエスケープシーケンスが含まれています。
- 対処
-
文字列定数には、正しいエスケープシーケンスを使用してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 0; string str1 = "sample' testing"; }
文字列変数「strl」は「'」付きの文字列が代入されていますが、その文字列が複数行にわたって記述されています。
文字列が連続していることを示す文字「_」を「'」の代わりに使用する必要があります。
- 正しい指定例
DEFINE { integer sloop_max=10; string str1 = "sample_ testing"; }
「'」を削除してエスケープシーケンスの誤りを修正しました。
-
AITCE-0009
case内で識別子は使用できません。
- 要因
-
case内で識別子を指定しています。
- 対処
-
case内では、定数またはマクロだけを使用してください。
- 例
-
- 誤った指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch (FileVersion) case stMsgText: // caseに識別子が指定されています ... break; default: ... break; endswitch; }
case内に、識別子「stMsgText」が指定されています。
- 正しい指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch (FileVersion) case "7.1": // 識別子の代わりに文字列定数を指定しました ... break; default: ... break; endswitch; }
case内に、識別子「stMsgText」の代わりに文字列定数を指定しました。
-
AITCE-0010
"+" または "-"の使用方法が誤っています。
- 要因
-
AITファイルで、「++」、「--」、「+-」、または「-+」演算子が指定されています。AITファイルの解析では、これらの演算子を解析できません。
- 対処
-
「++」、「--」、「+-」、または「-+」演算子をAITファイルから削除してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_count = 0; } MAIN { if (AIT_FileExists("#setup.exe") == 0) ... ... sloop_count++; // 誤った演算子「++」が変数の増分に使用されています endif; }
インクリメント演算子とディクリメント演算子は使用できません。
変数「sloop_count」が「++」で増分されているため、エラーメッセージが表示されます。
- 正しい指定例
DEFINE { integer sloop_count = 0; } MAIN { if (AIT_FileExists("#setup.exe") == 0) ... ... sloop_count = sloop_count + 1; // 「++」を削除しました endif; }
「++」を変数「sloop_count」から削除しました。
-
AITCE-0011
AITファイルが65535行を超えています。
- 要因
-
AITファイル内の最大行数は65,535です。AITファイルがこの最大値を超えると、AITファイルの解析を停止します。
- 対処
-
AITファイル内の行数を減らしてください。
-
AITCE-0012
<識別子> : 定義されていない識別子です。
- 要因
-
変数の型を定義しないで変数が指定されています。
- 対処
-
DEFINEセクションで変数を定義してください。
- 例
-
- 誤った指定例
DEFINE { string stMsgText; } MAIN { if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); sloop_max = 0; // この変数はDEFINEセクションで定義されていません endif; }
DEFINEセクションで変数「sloop_max」が定義されていないまま、MAINセクションでこの変数が指定されています。
- 正しい指定例
DEFINE { string stMsgText; integer sloop_max; // 変数「sloop_max」を定義しました } MAIN { if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); sloop_max = 0; // 定義した変数を利用しました endif; }
変数「sloop_max」がDEFINEセクションで定義され、その変数がMAINセクションで指定されました。
-
AITCE-0013
<識別子> : 再定義されました。
- 要因
-
すでに識別子が定義されている場合に、それと同じ識別子が再定義されています。
- 対処
-
再定義されている変数を削除してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 10; string sloop_max = "sample"; // 変数「sloop_max」がstring型として再定義されています。 }
すでにinteger型として定義されている変数「sloop_max」が、string型変数として再定義されています。
- 正しい指定例
DEFINE { integer sloop_max = 10; string stMsgText = "sample"; // 変数名を変更しました }
変数「sloop_max」の再定義を削除し、異なる変数名を定義しました。
-
AITCE-0014
パッケージ情報のフィールド <パッケージ項目>のデータ<値>が誤っています。
- 要因
-
PACKAGE_INFOセクション内のパッケージ項目のどれかに無効な値が含まれています。
- 対処
-
パッケージ情報のフィールドに適した値を指定してください。
- 例
-
- 誤った指定例
PACKAGE_INFO { PackageID = "#$@#ADOBEACROBATREADER"; // PackageIDに無効な文字#$@#が含まれています Product = "Adobe Acrobat Reader 5.05"; Version = "505"; InstallerName = "Ar505jpn.exe"; InstallDrive = "C:"; InstallDirectory = "'\Program Files'\Adobe"; }
PACKAGE_INFOセクションのPackageIDに、使用できない文字列「#$@」が含まれています。
- 正しい指定例
PACKAGE_INFO { PackageID = "ACROBAT-READER"; // 使用できない文字 #$@#を削除しました Product = "Adobe Acrobat Reader 5.05"; Version = "505"; InstallerName = "Ar505jpn.exe"; InstallDrive = "C:"; InstallDirectory = "'\Program Files'\Adobe"; }
PACKAGE_INFOセクションのPackageIDから、使用できない文字列「#$@」を削除しました。
-
AITCE-0015
左辺値はconstオブジェクトに指定されています。
- 要因
-
constant型として定義された変数にMAINセクションで値が割り当てられています。
- 対処
-
constant定義を変更するか、割り当てた左辺を削除してください。
- 例
-
- 誤った指定例
DEFINE { const float SLEEP_TIME = 2.0; integer sloop_count; } MAIN { if (AIT_FocusWindow("Setup", "#32770",0.0) > 0) AIT_PlayKey("{Enter}"); AIT_LogMessage("Setup: Enter"); sloop_count = 0; SLEEP_TIME = 3.0; // 変数「SLEEP_TIME」のconstant値を変更しようとしています AIT_Sleep(SLEEP_TIME); endif; }
変数「SLEEP_TIME」は、constant float型として定義されていますが、MAINセクション内で別の値が割り当てられました。
- 正しい指定例
DEFINE { const float SLEEP_TIME = 3.0; integer sloop_cnt; } MAIN { if (AIT_FocusWindow("Setup", "#32770",0.0) > 0) AIT_PlayKey("{Enter}"); AIT_LogMessage("Setup : Enter"); sloop_cnt = 0; AIT_Sleep(SLEEP_TIME); endif; }
MAINセクション内で、変数「SLEEP_TIME」のconstant float値への割り当てを削除しました。
-
AITCE-0018
AITファイルの構文誤りによって,AITファイルの解析が異常終了しました。
- 要因
-
文法チェック中に致命的なエラー(文字列の終了処理が正しくない、変数名内の文字数が正しく指定されていない)が発生しています。
- 対処
-
エラー個所を修正したあと、AITファイルを再度確認してください。
- 例
-
- 誤った指定例
DEFINE { string ErrorTxt = "ABC def"; }
文字列定数は、複数の行にわたって指定できませんが、文字列が複数の行にわたって指定されています。
- 正しい指定例
DEFINE { string ErrorTxt = "ABC_ def"; // 「_」で文字列が連続していることを示しています。 }
文字列の連続を示す「_」を付けて指定しました。
-
AITCE-0019
除算の2番目のオペランドは0です。
- 要因
-
AITファイルの解析時に除算の2番目のオペランドが0のため、未定義として扱われています。
- 対処
-
0以外の値を除数として指定してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_count = 0; const integer sloop_max = 30; } MAIN { sloop_count = sloop_max / 0; // 除数が0であるため、エラーになります }
0による除算はできませんが、変数「sloop_max」を0で除算しています。
- 正しい指定例
DEFINE { integer sloop_count = 0; const integer sloop_max = 30; } MAIN { sloop_count = sloop_max / 1; // 除数が0以外の値に変更しました }
0による変数「sloop_max」の除算を削除しました。
-
AITCE-0020
<データ型1>と<データ型2>は<処理名>と互換性がありません。
- 要因
-
演算子の左辺値と右辺値で互換性のないデータ型が指定されています。例えば、string型とinteger型が比較に使用された場合、このメッセージが表示されます。
- 対処
-
演算子の左辺値と右辺値の両方で互換性のあるデータ型を指定してください。
- 例
-
- 誤った指定例
DEFINE { const integer ExeVersion = 7; const string FileVersion = "7"; } MAIN { if (ExeVersion == FileVersion) // string型とinteger型が比較に使用されています ... ... endif; }
integer型変数「ExeVersion」とstring型変数「FileVersion」が比較に使用されています。
string型とinteger型には、比較演算のための互換性がありません。
- 正しい指定例
DEFINE { const integer ExeVersion = 7; const integer FileVersion = 7; } MAIN { if (ExeVersion == FileVersion) // 同じ型を比較に使用しました ... ... endif; }
string型変数「FileVersion」をinteger型変数に変更し、integer型変数との比較に変更しました。
-
AITCE-0021
オペレーション<演算子名>で<データ型1>の使用方法が誤っています。
- 要因
-
演算で不適切なデータ型が指定されています。例えば、float型が剰余(%)演算に使用された場合や、string型が!演算に使用された場合、このメッセージが表示されます。
- 対処
-
各演算で使用できるデータ型を指定してください。
- 例
-
- 誤った指定例
DEFINE { float SLEEP_TIME = 7.1; } MAIN { SLEEP_TIME = SLEEP_TIME % 2; // floatは剰余演算で使用できないため、エラーになります }
float型は剰余演算に使用できませんが、float型変数「SLEEP_TIME」が剰余演算に使用されています。
- 正しい指定例
DEFINE { integer SLEEP_TIME = 7; } MAIN { SLEEP_TIME = SLEEP_TIME % 2; // integer型変数を剰余演算に使用しました }
integer値を剰余演算に使用しました。
-
AITCE-0022
integer値は'-2147483648'〜'2147483647'の範囲で指定してください。
- 要因
-
許容範囲外のinteger値が指定されています。
- 対処
-
'-2,147,483,648'〜'2,147,483,647'でinteger値を指定してください。
- 例
-
- 誤った指定例
DEFINE { const integer OK_END = 21474836476; // integer値が最大値を超えています }
変数「OK_END」に最大値よりも大きいinteger値が指定されています。
- 正しい指定例
DEFINE { const integer OK_END =214748364; // integer値の範囲内で指定しました }
変数「OK_END」にinteger値の範囲内の値を指定しました。
-
AITCE-0023
float値は'3.402823466e+38'〜'1.175494351e-38'の範囲で指定してください。
- 要因
-
許容範囲外のfloat値が指定されています。
- 対処
-
'3.402823466e+38'〜'1.175494351e-38'でfloat値を指定してください。
- 例
-
- 誤った指定例
DEFINE { const float NG_END = 3.402823466e+40; // float値が最大値を超えています }
変数「NG_END」に最大値よりも大きいfloat値が指定されています。
- 正しい指定例
DEFINE { const float NG_END = 3.402823466e+10; // float値の範囲内で指定しました }
変数「NG_END」にfloat値の範囲内の値を指定しました。
-
AITCE-0024
switch式の求める数値のデータ型が誤っています。
- 要因
-
caseラベル値のデータ型がswitchステートメントのcaseのデータ型と一致していません。例えば、switchステートメントがinteger型の場合にcase値にfloat値が含まれていると、このメッセージが表示されます。
- 対処
-
switchステートメントとcaseラベル値で一致するデータ型を指定してください。
- 例
-
- 誤った指定例
DEFINE { const string FileVersion = "7.1"; integer sloop_max = 0; } MAIN { switch (FileVersion) // switchステートメントはstring型です case 7.1: // caseにinteger値が指定されています ... ... break; default: ... ... break; endswitch; }
switchステートメントのデータ型はstring型ですが、case値はinteger型になっています。
- 正しい指定例
DEFINE { const string FileVersion = "7.1"; integer sloop_max = 0; } MAIN { switch (FileVersion) case "7.1": // caseラベルにstring値を指定しました ... ... break; default: ... ... break; endswitch; }
case値にstring型を指定し、switch文のデータ型と一致するよう変更しました。
-
AITCE-0025
コメントで予期しないEOFが検出されました。
- 要因
-
「/*」で開始されたコメントがファイルの終わりまでに「*/」で終了されていません。
- 対処
-
ファイルの終わりまでに、コメントを閉じる「*/」を指定してください。
- 例
-
- 誤った指定例
DEFINE { /* AITファイルで使用するデータ型 // コメントが閉じられていません const integer NG_END = -1 const integer sloop_max = 30; }
コメントはすべて閉じる必要があります。この例では、「/*」でコメントが開始されていますが、「*/」で終了されていません。
- 正しい指定例
DEFINE { /* AITファイルで使用するデータ型 */ // コメントが終了されています const integer NG_END = -1; const integer sloop_max = 30; }
コメントが「*/」で終了されました。
-
AITCE-0026
<文字コード(16進数)>は不正な文字です。
- 要因
-
AIT言語仕様で規定されていない文字が存在します。文字コードが16進数で表示されます。
- 対処
-
AIT言語仕様に記載されている有効な文字だけを指定してください。
- 例
-
- 誤った指定例
DEFINE { const integer OK_END = 0; const integer NG_END = -1; const integer sloop_max = #30; // 無効な文字「#」があります }
「#$@」といった無効な文字は、文字列定数内で使用できませんが、「#」が変数「sloop_max」に含まれています。
- 正しい指定例
DEFINE { const integer OK_END =0; const integer NG_END = -1; const integer sloop_max = 30; // 無効な文字「#」を削除しました }
「#」を変数「sloop_max」から削除しました。
-
AITCE-0027
式の中ではvoid型を使用できません。有効な型を使用してください。
- 要因
-
voidを返す関数が式で使用されています。
- 対処
-
voidを返す関数は式で使用しないでください。
-
AITCE-0029
caseの値<caseラベル値>はすでに使われています。
- 要因
-
switchステートメントで同じcase値が複数回使用されています。
- 対処
-
固有のcaseラベル値を指定してください。
- 例
-
- 誤った指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch(FileVersion ) case "7.1": ... ... break; case "7.1": // case値"7.1"はすでに使用されています ... ... break; default: ... ... break; endswitch; }
switchステートメント内で固有のcaseラベル値を指定する必要があります。
ここで、2番目のcaseラベル値"7.1"は最初のcaseラベル値と同じです。
- 正しい指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch(FileVersion ) case "7.1": // 重複するcase値"7.1"を削除しました ... ... break; default: ... ... break; endswitch; }
2番目のcaseラベル値を削除しました。
-
AITCE-0030
<関数名> : 関数名が誤っています。
- 要因
-
無効な関数名(使用できるAPI一覧にない関数名)が指定されています。
- 対処
-
AITファイルで有効な関数名を指定してください。有効な関数(API名)の一覧は、「18.1 API一覧」を参照してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists1("#setup.exe") == 0) // 「AIT_FileExists1」は使用できるAPIではありません stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
「AIT_FileExists1()」は使用できるAPIではありません。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists("setup.exe") == 0) // 使用できるAPIを指定しました stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
使用できるAPIとして「AIT_FileExists()」を指定しました。
-
AITCE-0031
<関数名> : 引数<指定されている引数の数>を取得できません。
- 要因
-
引数の数に誤りのある関数が含まれています。
関数にはそれぞれ独自の引数のセットがあります。関数に対して指定された引数の数が、実際に呼び出させる関数の引数の数と一致しないと、このメッセージが呼び出されます。
- 対処
-
関数に対して正しい数の引数を指定してください。実際の引数のリストについては、「18.2 APIの詳細」を参照してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists() == 0) // 「AIT_FileExists」に引数が指定されていません stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
「AIT_FileExists()」に対しては、1つ以上の引数を指定してください。この例では「AIT_FileExists()」に対して引数が指定されていません。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists("#setup.exe") == 0) // 「AIT_FileExists」に対して引数を指定しました stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
「AIT_FileExists()」に対して引数を指定しました。
-
AITCE-0032
関数に指定された一つまたは複数の変数のデータ型が誤っています。
- 要因
-
引数のデータ型と一致しないデータ型が関数に含まれています。
関数にはそれぞれ独自の引数のセットがあります。関数に対して指定された引数のデータ型が、実際に呼び出させる関数の引数のデータ型と一致しないと、このメッセージが呼び出されます。
- 対処
-
関数の引数で正しいデータ型を指定してください。実際の引数のリストについては、「18.2 APIの詳細」を参照してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion ) if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); AIT_Sleep(3); // integer値が「AIT_Sleep」に指定されています endif; endif; }
「AIT_Sleep()」には、float型の引数だけが指定できますが、integer値が引数として指定されています。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == Version) if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); AIT_Sleep(3.1); // integer値をfloat値に変更しました endif; endif; }
「AIT_Sleep()」の引数をintegerからfloatに変更しました。
-
AITCE-0034
<ラベル名> : 定義されていないラベルです。
- 要因
-
ラベルを定義しないでgotoステートメントが使用されています。
AITファイルでは、各gotoステートメントに対して関連するラベルを定義する必要があります。
- 対処
-
すべてのgotoステートメントに対して関連ラベル名を指定してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 0; } MAIN { goto ErrorLabel; // ラベル「ErrorLabel」が定義されていません sloop_max = 0; }
gotoステートメントに対して、関連するラベルステートメントを指定する必要があります。
ここでは、goto ErrorLabelしか指定されていません。ラベル「ErrorLabel」はMAINセクションのどこにも定義されていません。
- 正しい指定例
DEFINE { integer sloop_max = 0; } MAIN { goto ErrorLabel; sloop_max = 0; ErrorLabel: // ラベルを定義しました }
gotoステートメントに対してラベル「ErrorLabel」を指定しました。
-
AITCE-0037
gotoのラベル<ラベル名>は別のセクションにあります。
- 要因
-
指定されたラベル名とそれに対応するgotoステートメントが別のセクションに存在します。
gotoステートメントとそれに関連するラベルは、同じセクション内にある必要があります。
- 対処
-
ラベル名とgotoステートメントは同じセクション内で指定してください。
- 例
-
- 誤った指定例
DEFINE { string stMsgText; } MAIN { goto ErrorLabel; // gotoステートメントがMAINセクションで定義されています } ERROR { ErrorLabel: // ラベルがERRORセクションで定義されています stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; }
ラベルとそのgotoステートメントは、同じセクション内で定義する必要があります。この例では、gotoステートメントがMAINセクション内にあり、ラベル「ErrorLabel」がERRORセクション内にあります。
- 正しい指定例
DEFINE { string stMsgText; } MAIN { goto ErrorLabel; ErrorLabel: // ラベルがMAINセクション内で定義されています stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; }
ラベル「ErrorLabel」とそのgotoステートメントをMAINセクション内で定義しました。
-
AITCE-0038
変数の設定値の型が誤っています。
- 要因
-
変数に対して指定された値が変数のデータ型と異なります。例えば、string値がinteger型変数に割り当てられると、このメッセージが呼び出されます。
- 対処
-
変数と同じ型の値を指定してください。
- 例
-
- 誤った指定例
DEFINE { const integer OK_END =0; const integer NG_END = -1; const integer sloop_max = "30"; // string値がinteger型変数に割り当てられています }
この例では、文字列定数が整数定数「sloop_max」に割り当てられています。
- 正しい指定例
DEFINE { const integer OK_END =0; const integer NG_END = -1; const integer sloop_max = 30; // string値でなくinteger値を割り当てました }
文字列定数を削除し、integer値の変数「sloop_max」を割り当てました。
-
AITCE-0039
breakの使用方法が誤っています。
- 要因
-
do-while、while-loop、for-next、またはswitchステートメント以外でbreakステートメントが使用されています。breakステートメントはループ構造体内だけで有効です。
- 対処
-
breakステートメントは、do-while、while-loop、for-next、またはswitchステートメント内で使用してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion ) if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); break; // breakステートメントがifステートメント内にあります endif; endif; }
この例では、breakステートメントがif構造体内にあります。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
breakステートメントをif構造体から削除しました。
-
AITCE-0040
continueの使用方法が誤っています。
- 要因
-
do-while、while-loop、またはfor-next以外でcontinueステートメントが使用されています。continueステートメントは、ループ構造体内だけで有効です。
- 対処
-
continueステートメントは、do-while、while-loop、またはfor-nextステートメント内だけで使用してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); continue; // continueステートメントがifステートメント内にあります endif; endif; }
この例では、continueがif構造体内にあります。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; string stMsgText; } MAIN { if (ExeVersion == FileVersion) if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
continueステートメントをif構造体から削除しました。
-
AITCE-0041
'<ループ構造体>'が255 breakステートメントを超えました。
- 要因
-
255より多くのbreakステートメントがループ構造体内にあります。ループ構造体(do-while、while、for-nextまたはswitch構造体)内で使用できるbreakステートメントの最大数は255です。
- 対処
-
ループ構造体内で指定するbreakステートメントの数を、最大数以下にしてください。
-
AITCE-0042
'<ループ構造体>'が255 continueステートメントを超えました。
- 要因
-
255より多くのcontinueステートメントがループ構造体内にあります。ループ構造体(do-while、while、for-next)内で使用できるcontinueステートメントの最大数は255です。
- 対処
-
ループ構造体内で指定するcontinueステートメントの数を、最大数以下にしてください。
-
AITCE-0043
switchステートメントのcaseラベル数が255を超えています。
- 要因
-
255より多くのcaseラベルがswitchステートメント内にあります。switchステートメント内で使用できるcaseラベルの最大数は255です。
- 対処
-
switchステートメント内で指定するcaseラベルの数は、最大数以下にしてください。
-
AITCE-0044
switchステートメントに一つ以上のdefaultラベルは使用できません。
- 要因
-
switchステートメント内で使用できるdefaultステートメントは1つだけです。
- 対処
-
switchステートメント内で指定するdefaultステートメントは1つだけにしてください。
- 例
-
- 誤った指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch(FileVersion ) case "7.1": ... ... break; default: // 最初のdefaultです ... ... break; default: // defaultが2つ指定されています ... ... break; endswitch; }
各switchステートメントで指定できるdefaultステートメントは1つだけです。この例では、switchステートメントにdefaultステートメントが2つ指定されています。
- 正しい指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch(FileVersion) case "7.1": ... ... break; default: // defaultを1つだけ指定しました ... ... break; endswitch; }
switchステートメントからdefaultステートメントを1つ削除しました。
-
AITCE-0045
パッケージ情報に必要なフィールド'<フィールド名>'が見つかりません。
- 要因
-
PACKAGE_INFOセクションで指定する必要のあるフィールドのうち、どれかが指定されていません。
- 対処
-
PACKAGE_INFOセクションで必要なすべてのフィールドを指定してください。
- 例
-
- 誤った指定例
PACKAGE_INFO { // 指定する必要のあるPackageIDが欠けています Product = "Adobe Acrobat Reader 5.05"; Version = "505"; InstallerName = "Ar505jpn.exe"; InstallDrive = "C:"; InstallDirectory = "'\Program Files'\Adobe"; }
指定する必要のあるPackageIDが指定されていません。
- 正しい指定例
PACKAGE_INFO { PackageID = "ADOBEACROBATREADER"; // 指定する必要のあるパッケージ項目を指定しました Product = "Adobe Acrobat Reader 5.05"; Version = "505"; InstallerName = "Ar505jpn.exe"; InstallDrive = "C:"; InstallDirectory = "'\Program Files'\Adobe"; }
PackageIDをPACKAGE_INFOセクション内に追加しました。
-
AITCE-0046
演算子'+','-'と'!'は,文字列定数で使用できません。
- 要因
-
単項演算子と文字列定数が一緒に指定されています。
- 対処
-
単項演算子と文字列定数は一緒に指定しないでください。
- 例
-
- 誤った指定例
DEFINE { const integer OK_END =0; const integer NG_END = -1; const string szMsgText = !"30"; // 「!」を文字列定数に使用しました }
DEFINEセクションで文字列定数を初期化する際、単項演算子(「+」、「-」、および「!」)は使用できません。
ここでは、変数「szMsgText」で、「!」が文字列定数と一緒に指定されています。
- 正しい指定例
DEFINE { const integer OK_END =0; const integer NG_END = -1; const string szMsgText = "30"; // 「!」を削除しました }
「!」を変数「szMsgText」から削除しました。
-
AITCE-0047
式内でラベルの使用方法が誤っています。
- 要因
-
ラベルが式内で使用されています。
- 対処
-
ラベルは式内で使用しないでください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 0; } MAIN { ErrorLabel: if (ErrorLabel) // if構造体内でラベル名が使用されています AIT_LogMessage("Setup(Japanese)For Windows-Start"); if (AIT_FileExists("#setup.exe") == 0) goto ErrorLabel; sloop_max = 0; endif; endif; }
ラベルは式内で使用できません。この例では、ラベル「ErrorLabel」がif構造体内で指定されています。
- 正しい指定例
DEFINE { integer sloop_max = 0; string stMsgText; } MAIN { if(1) // ラベルを式から削除しました if (AIT_FileExists("#setup.exe") == 0) goto ErrorLabel; sloop_max = 0; endif; ErrorLabel: stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; }
ラベル「ErrorLabel」をif構造体から削除し、式内の値を有効にしました。
-
AITCE-0048
case内で ""!"" 演算子は使用できません。
- 要因
-
caseラベル値に式が指定されています。switchステートメント内のcaseラベル値には定数値しか指定できません。
- 対処
-
caseラベル値内では式を指定しないでください。
- 例
-
- 誤った指定例
DEFINE { const integer FileVersion = 7; string stMsgText; } MAIN { switch (FileVersion) case 7: ... ... break; case 5 + 1: // caseステートメント内では式を使用できません ... ... break; default: ... ... break; endswitch; }
switchステートメント内では定数だけが指定できます。この例では、2番目のcaseラベルに加算演算式が指定されています。
- 正しい指定例
DEFINE { const integer FileVersion = 7; string stMsgText; } MAIN { switch (FileVersion) case 7: ... ... break; case 6: // 式を削除し、定数を指定しました ... ... break; default: ... ... break; endswitch; }
2番目のcaseステートメントから加算演算式を削除し、定数を指定しました。
-
AITCE-0050
AITファイルのバージョンと実行エンジンのDLLのバージョンが不一致です。
- 要因
-
AITファイルのバージョンが実行エンジンのDLLより新しいことが考えられます。
- 対処
-
AITファイルの実行時に、スクリプトエンジンのDLLのバージョンがPACKAGE_INFOセクションで示されているScriptFileVersionよりも新しいか確認してください。ScriptFileVersionは、DLLのバージョンよりも前である必要があります。
-
AITCW-0016
<ランクの高いデータ型>から<ランクの低いデータ型>に変換しました。データが失われている可能性があります。
- 要因
-
AITファイルで、ランクの低いデータ型にランクの高いデータ型を割り当てようとすると、値が切り捨てられ、それがランクの低いデータ型に割り当てられます。integer型変数に対して、float値を割り当てた場合が考えられます。
- 対処
-
ランクの高いデータ型を使用してください。
- 例
-
- 誤った指定例
DEFINE { const integer OK_END = 0; const integer SLEEP_TIME = 3.8; // float型変数を整数定数に割り当てようとしています。値は切り捨てられ、3だけが変数に保存されます。 }
ここでは、float値がinteger型変数「SLEEP_TIME」に割り当てられています。割り当てられた値は切り捨てられ、integer値だけが変数「SLEEP_TIME」に保存されます。
- 正しい指定例
DEFINE { const integer OK_END =0; const float SLEEP_TIME = 3.8; // 変数の型をfloat型に変更しました }
float値を保持するために、変数「SLEEP_TIME」のデータ型をinteger型からfloat型に変更しました。
-
AITCW-0017
<処理>でbool型変数は指定できません。
- 要因
-
bool型変数を予期しない方法で指定すると、この警告が呼び出されます。例えば、bool型変数を除算演算や剰余演算(/、%)に指定すると、0による除算または0/0矛盾につながり、警告メッセージが呼び出されます。
- 対処
-
このような場合は、bool型変数を指定しないでください。
- 例
-
- 誤った指定例
DEFINE { const integer sloop_max = 30; integer sloop_count; bool IsPathSet = false; } MAIN { sloop_count = sloop_max / IsPathSet; // bool型変数が除数として指定されています }
bool型変数を使用すると、0による除算となり、この警告メッセージが表示されます。ここでは、bool型変数「IsPathSet」が除数として指定されているため、0による除算となります。
- 正しい指定例
DEFINE { integer NG_END = 1; const integer sloop_max = 30; integer sloop_count; } MAIN { sloop_count = sloop_max / NG_END; // bool型変数を削除し、integer型変数を除数として指定しました }
bool型変数「IsPathSet」を削除し、integer型変数「NG_END」を除数として指定しました。
-
AITCW-0028
演算子<演算子名>で<データ型1>と<データ型2>は混在できません。
- 要因
-
ビットの論理積や論理和などの演算の式で、integer型やbool型が混合して指定されています。
- 対処
-
式のオペランドでは一貫したデータ型を指定してください。
- 例
-
- 誤った指定例
DEFINE { integer sloop_max = 0; bool IsPathSet; } MAIN { sloop_max = sloop_max & IsPathSet; // ビット演算の論理積に対してinteger型とbool型が指定されています }
この例では、「&」演算に対してinteger型とbool型が指定され、データ型が混在しています。
- 正しい指定例
DEFINE { integer sloop_max = 0; integer sloop_count; } MAIN { sloop_max = sloop_max & sloop_count; // ビット演算の論理積に対してinteger型とinteger型を指定しました }
「&」演算に対して同じデータ型(integer型とinteger型)を指定しました。
-
AITCW-0033
switchステートメントにはdefaultラベルしかありません。
- 要因
-
switchステートメントでdefaultステートメントのcaseだけが指定されています。switchステートメントのcaseラベルが指定されていません。これは、ステートメントのシーケンスに相当します。
- 対処
-
switchステートメントで少なくとも1つのcaseラベルを指定してください。
- 例
-
- 誤った指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch(FileVersion) default: // switchステートメントにdefaultステートメントしか使用していません ... ... break; endswitch; }
すべてのswitchステートメントに、1つ以上のcaseステートメントが必要ですが、この例では、caseステートメントがなくdefaultステートメントしか指定されていません。
- 正しい指定例
DEFINE { const string FileVersion = "7.1"; string stMsgText; } MAIN { switch(Version ) case "7.1": // switchステートメントにcaseステートメントが含まれています ... ... break; default: ... ... break; endswitch; }
switchステートメントにcaseステートメントを追加しました。
-
AITCW-0035
<ラベル名> : 定義されたラベルが使われていません。
- 要因
-
ラベルが定義されていますが、参照されていません。このラベルを無視します。
- 対処
-
ラベル名を参照するgotoステートメントを指定してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; integer sloop_max = 0; } MAIN { if (ExeVersion == FileVersion ) ErrorLabel: // ラベルに関連するgotoステートメントがありません AIT_LogMessage("Setup(Japanese)For Windows-Start"); if (AIT_FileExists("#setup.exe") == 0) sloop_max = 0; endif; endif; }
ラベルには、対応するgotoステートメントが必要です。gotoステートメントなしでラベルステートメントを定義すると、そのラベルステートメントは無視されます。この例では、ラベル「ErrorLabel」がgotoステートメントなしで指定されています。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; integer sloop_max = 0; } MAIN { if (ExeVersion == FileVersion) AIT_LogMessage("Setup(Japanese)For Windows-Start"); if (AIT_FileExists("#setup.exe") == 0) goto ErrorLabel; // gotoステートメントを指定しました sloop_max = 0; endif; ErrorLabel: // ラベルが定義されています stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; }
ラベル「ErrorLabel」に対応するgotoステートメントを指定しました。
なお、必要のないラベルステートメントを削除する対処方法もあります。
-
AITCW-0036
<変数名> : 定義された変数が使われていません。
- 要因
-
変数がDEFINEセクションで定義されていますが、参照されていません。
- 対処
-
不要な場合や使用しない場合は、変数の定義を削除してください。
- 例
-
- 誤った指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; integer sloop_max; // この変数はプログラム内のどこからも参照されていません string stMsgText; } MAIN { if (ExeVersion == FileVersion) AIT_LogMessage("Setup(Japanese)For Windows-Start"); if (AIT_FileExists("#setup.exe") == 0) stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; endif; endif; }
上の例で、変数「sloop_max」はDEFINEセクションで定義されていますが、MAINセクション内で使用されていません。
- 正しい指定例
DEFINE { const string ExeVersion = "7.1"; const string FileVersion = "7.1"; integer sloop_max; string stMsgText; } MAIN { if (ExeVersion == FileVersion) AIT_LogMessage("Setup(Japanese)For Windows-Start"); if (AIT_FileExists("#setup.exe") == 0) sloop_max = 0;// ここで変数「sloop_max」が使用されています stMsgText = "Setup(Japanese) " + InstallerName + " Not Found"; AIT_LogMessage(stMsgText); endif; endif; }
変数「sloop_max」はMAINセクション内で使用しました。
なお、MAINセクションで必要のない変数はDEFINEセクションから削除する対処方法もあります。