Index: trunk/ab5.0/abdev/BasicCompiler64/BasicCompiler.vcproj
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/BasicCompiler.vcproj	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/BasicCompiler.vcproj	(revision 468)
@@ -82,5 +82,5 @@
 				Name="VCLinkerTool"
 				AdditionalOptions="/MACHINE:AMD64"
-				AdditionalDependencies="comctl32.lib psapi.lib bufferoverflowu.lib commond.lib imagehlp.lib"
+				AdditionalDependencies="comctl32.lib psapi.lib bufferoverflowu.lib commond.lib imagehlp.lib shlwapi.lib"
 				OutputFile="../ActiveBasic/BasicCompiler64.exe"
 				LinkIncremental="2"
@@ -195,5 +195,5 @@
 				Name="VCLinkerTool"
 				AdditionalOptions="/MACHINE:AMD64"
-				AdditionalDependencies="comctl32.lib psapi.lib bufferoverflowu.lib common.lib imagehlp.lib"
+				AdditionalDependencies="comctl32.lib psapi.lib bufferoverflowu.lib common.lib imagehlp.lib shlwapi.lib"
 				OutputFile="../ActiveBasic/BasicCompiler64.exe"
 				LinkIncremental="1"
@@ -329,4 +329,8 @@
 					>
 				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\include\Messenger.h"
+					>
+				</File>
 				<Filter
 					Name="Language Classes"
@@ -397,8 +401,4 @@
 					</File>
 					<File
-						RelativePath="..\BasicCompiler_Common\include\Program.h"
-						>
-					</File>
-					<File
 						RelativePath="..\BasicCompiler_Common\include\Prototype.h"
 						>
@@ -425,4 +425,20 @@
 					</File>
 				</Filter>
+			</Filter>
+			<Filter
+				Name="Debugger Classes"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\include\Debugger.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="Application Classes"
+				>
+				<File
+					RelativePath="..\BasicCompiler_Common\include\Program.h"
+					>
+				</File>
 			</Filter>
 		</Filter>
@@ -1245,4 +1261,8 @@
 					>
 				</File>
+				<File
+					RelativePath="..\BasicCompiler_Common\src\Messenger.cpp"
+					>
+				</File>
 				<Filter
 					Name="Language Classes"
@@ -1330,8 +1350,4 @@
 					<File
 						RelativePath="..\BasicCompiler_Common\src\Procedure.cpp"
-						>
-					</File>
-					<File
-						RelativePath="..\BasicCompiler_Common\src\Program.cpp"
 						>
 					</File>
@@ -1362,5 +1378,5 @@
 				>
 				<File
-					RelativePath="..\BasicCompiler_Common\include\Program.h"
+					RelativePath="..\BasicCompiler_Common\src\Program.cpp"
 					>
 				</File>
Index: trunk/ab5.0/abdev/BasicCompiler64/CParameter.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/CParameter.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/CParameter.cpp	(revision 468)
@@ -282,5 +282,5 @@
 				char temp2[255];
 				sprintf(temp2,"%s関数の第%dパラメータ",procName,i2+1);
-				SetError(19,temp2,cp);
+				compiler.errorMessenger.Output(19,temp2,cp);
 				continue;
 			}
@@ -404,10 +404,10 @@
 									if( dummyType.IsObject() ){
 										if( !dummyType.GetClass().IsEqualsOrSubClass( &varType.GetClass() ) ){
-											SetError(11,Parms[i2],cp);
+											compiler.errorMessenger.Output(11,Parms[i2],cp);
 										}
 									}
 									else if( dummyType.IsStruct() ){
 										if( !dummyType.GetClass().IsEquals( &varType.GetClass() ) ){
-											SetError(11,Parms[i2],cp);
+											compiler.errorMessenger.Output(11,Parms[i2],cp);
 										}
 									}
@@ -418,5 +418,5 @@
 								}
 								else{
-									SetError(11,Parms[i2],cp);
+									compiler.errorMessenger.Output(11,Parms[i2],cp);
 								}
 							}
Index: trunk/ab5.0/abdev/BasicCompiler64/CodeGenerator.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/CodeGenerator.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/CodeGenerator.cpp	(revision 468)
@@ -414,5 +414,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	// [8bit rex] 1000 1011 11xx xbbb
@@ -435,5 +435,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0110 0011 11rr rbbb
@@ -455,5 +455,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0000 1111 1011 1111 11rr rbbb
@@ -476,5 +476,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0000 1111 1011 1110 11rr rbbb
@@ -504,5 +504,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0000 1111 1011 1111 11rr rbbb
@@ -526,5 +526,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0000 1111 1011 1110 11rr rbbb
@@ -555,5 +555,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//0110 0110 [8bit rex] 0000 1111 1011 1110 11rr rbbb
@@ -639,5 +639,5 @@
 	if(REG_R8<=reg&&reg<=REG_R15) RexByte=0x49;
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	if(reg==REG_RAX){
@@ -679,5 +679,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0000 0011 11rr rbbb
@@ -699,5 +699,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0000 0011 11rr rbbb
@@ -747,5 +747,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0010 1011 11rr rbbb
@@ -767,5 +767,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 0010 1011 11rr rbbb
@@ -818,5 +818,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -844,5 +844,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -885,5 +885,5 @@
 	if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//rexプリフィックス
@@ -903,5 +903,5 @@
 	if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x49;
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//rexプリフィックス
@@ -939,5 +939,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -973,5 +973,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1007,5 +1007,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1055,5 +1055,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1074,5 +1074,5 @@
 	if(REG_R8<=reg&&reg<=REG_R15) (char)RexByte=0x49;
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	if(reg==REG_RAX){
@@ -1101,5 +1101,5 @@
 	if(REG_R8<=reg&&reg<=REG_R15) RexByte=(char)0x41;
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	if(reg==REG_RAX){
@@ -1152,5 +1152,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1196,5 +1196,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1228,5 +1228,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1269,5 +1269,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 	//[8bit rex] 1000 0101 11rr rbbb
@@ -1308,5 +1308,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1491,5 +1491,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
@@ -1532,5 +1532,5 @@
 	}
 
-	if(RexByte==-1) SetError(300,NULL,cp);
+	if(RexByte==-1) compiler.errorMessenger.Output(300,NULL,cp);
 
 
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Calc.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Calc.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Calc.cpp	(revision 468)
@@ -27,5 +27,5 @@
 	}
 	else{
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 }
@@ -43,5 +43,5 @@
 			//ダブルクォートは不正なのでエラー扱い
 			variable[i]=0;
-			SetError(3,variable,cp);
+			compiler.errorMessenger.Output(3,variable,cp);
 			return;
 		}
@@ -90,5 +90,5 @@
 			if(GetVarType(variable,Type(),0)){
 				//変数リストに該当したとき
-				SetError(1,NULL,cp);
+				compiler.errorMessenger.Output(1,NULL,cp);
 			}
 			else{
@@ -97,9 +97,9 @@
 				{
 					//定数リストに該当したとき
-					SetError(1,NULL,cp);
+					compiler.errorMessenger.Output(1,NULL,cp);
 				}
 				else{
 					//変数リスト、定数リストに該当しないとき
-					SetError(3,variable,cp);
+					compiler.errorMessenger.Output(3,variable,cp);
 				}
 			}
@@ -123,5 +123,5 @@
 
 	if(Command[i+1]=='\0'){
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		return;
 	}
@@ -164,5 +164,5 @@
 
 	if( lstrcmpi( variable, "This" ) == 0 ){
-		SetError(133,NULL,cp);
+		compiler.errorMessenger.Output(133,NULL,cp);
 		return;
 	}
@@ -197,5 +197,5 @@
 	if(reg!=REG_RAX&&calcType.IsWhole()||
 		varType.IsNull()||calcType.IsNull()){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 
@@ -207,5 +207,5 @@
 	if( !TermOpeOnlyVariable( variable, varType, VarRelativeVar, true ) )
 	{
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 		return;
 	}
@@ -215,5 +215,5 @@
 
 	if(varType.GetBasicType()&FLAG_PTR){
-		SetError(14,variable,cp);
+		compiler.errorMessenger.Output(14,variable,cp);
 		return;
 	}
@@ -243,5 +243,5 @@
 		compiler.GetObjectModule().meta.GetBlittableTypes().GetClass( calcType ).GetStaticMethods().Enum( "_Create", userProcs );
 		if( userProcs.size() != 1 ){
-			SetError();
+			compiler.errorMessenger.OutputFatalError();
 			return;
 		}
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Calc_PushVar.cpp	(revision 468)
@@ -19,5 +19,5 @@
 	}
 	else if( pRelativeVar->dwKind == VAR_REFGLOBAL ){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 	else if(pRelativeVar->dwKind==VAR_LOCAL){
@@ -77,5 +77,5 @@
 	}
 	else if( pRelativeVar->dwKind == VAR_REFGLOBAL ){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 	else if(pRelativeVar->dwKind==VAR_LOCAL){
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_CallProc.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_CallProc.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_CallProc.cpp	(revision 468)
@@ -143,5 +143,5 @@
 					}
 					else{
-						SetError(300,NULL,cp);
+						compiler.errorMessenger.Output(300,NULL,cp);
 					}
 				}
@@ -171,5 +171,5 @@
 			pMethod = pobj_c->GetStaticMethods().GetMethodPtr( pUserProc );
 			if( !pMethod ){
-				SetError(300,NULL,cp);
+				compiler.errorMessenger.Output(300,NULL,cp);
 				return false;
 			}
@@ -189,5 +189,5 @@
 				//同一クラスオブジェクトの場合はプライベートアクセスを容認する
 				if( pMethod->IsNoneAccess() ){
-					SetError(109,pUserProc->GetName(),cp);
+					compiler.errorMessenger.Output(109,pUserProc->GetName(),cp);
 					return false;
 				}
@@ -196,9 +196,9 @@
 				if( pMethod->IsPrivate()
 					|| pMethod->IsNoneAccess() ){
-					SetError(109,pUserProc->GetName(),cp);
+					compiler.errorMessenger.Output(109,pUserProc->GetName(),cp);
 					return false;
 				}
 				if( !pMethod->GetUserProc().GetParentClass().IsEqualsOrSubClass( pobj_c ) && pMethod->IsProtected() ){
-					SetError(110,pUserProc->GetName(),cp);
+					compiler.errorMessenger.Output(110,pUserProc->GetName(),cp);
 					return false;
 				}
@@ -208,5 +208,5 @@
 			//クラス内部からの呼び出し（継承によるACCESS_NONのみをエラーとする）
 			if( pMethod->IsNoneAccess() ){
-				SetError(109,pUserProc->GetName(),cp);
+				compiler.errorMessenger.Output(109,pUserProc->GetName(),cp);
 				return false;
 			}
@@ -329,5 +329,5 @@
 				if( !resultType.IsObject() )
 				{
-					SetError();
+					compiler.errorMessenger.OutputFatalError();
 				}
 
@@ -373,5 +373,5 @@
 			if( vtblMasterListIndex != 0 )
 			{
-				SetError();
+				compiler.errorMessenger.OutputFatalError();
 			}
 		}
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Func.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Func.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Func.cpp	(revision 468)
@@ -110,5 +110,5 @@
 					|| type.IsObjectPtr() && referenceKind == RefPointer ) )
 				{
-					SetError(104,ObjectName,cp);
+					compiler.errorMessenger.Output(104,ObjectName,cp);
 				}
 
@@ -149,5 +149,5 @@
 			if( vtblMasterListIndex != 0 )
 			{
-				SetError();
+				compiler.errorMessenger.OutputFatalError();
 			}
 		}
@@ -248,5 +248,5 @@
 		{
 			extern int cp;
-			SetError(1,NULL,cp);
+			compiler.errorMessenger.Output(1,NULL,cp);
 			return;
 		}
@@ -312,5 +312,5 @@
 		GetOverloadSubHash( name, subs );
 		if( subs.size() == 0 ){
-			SetError(27,name,cp);
+			compiler.errorMessenger.Output(27,name,cp);
 			return;
 		}
@@ -332,5 +332,5 @@
 					) )
 				{
-					SetError(67, name, cp );
+					compiler.errorMessenger.Output(67, name, cp );
 				}
 			}
@@ -343,5 +343,5 @@
 					) )
 				{
-					SetError(66, name, cp );
+					compiler.errorMessenger.Output(66, name, cp );
 				}
 			}
@@ -349,5 +349,5 @@
 
 		if(!pUserProc){
-			SetError(27,name,cp);
+			compiler.errorMessenger.Output(27,name,cp);
 			return;
 		}
@@ -356,5 +356,5 @@
 		pUserProc=GetSubHash(name);
 		if(!pUserProc){
-			SetError(27,name,cp);
+			compiler.errorMessenger.Output(27,name,cp);
 			return;
 		}
@@ -383,5 +383,5 @@
 	Type tempType;
 	if( !compiler.StringToType( typeName, tempType ) ){
-		SetError(3,typeName,cp);
+		compiler.errorMessenger.Output(3,typeName,cp);
 		return;
 	}
@@ -424,5 +424,5 @@
 		compiler.codeGenerator.op_mov_RM( sizeof(_int64), REG_RAX, REG_RAX, 0, MOD_BASE );
 
-		SetError(-120,NULL,cp);
+		compiler.errorMessenger.Output(-120,NULL,cp);
 	}*/
 }
@@ -460,5 +460,5 @@
 	}
 	else{
-		SetError(134,NULL,cp );
+		compiler.errorMessenger.Output(134,NULL,cp );
 	}
 }
@@ -545,5 +545,5 @@
 	}
 	if(!tempType.IsWhole()){
-		SetError(11,Parameter,cp);
+		compiler.errorMessenger.Output(11,Parameter,cp);
 		return;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Object.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Object.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Object.cpp	(revision 468)
@@ -22,5 +22,5 @@
 
 	if(bSomeObjects){
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 		//mov qword ptr[rsp+offset],rbx     ※スタックフレームを利用
 		//pobj_sf->push(REG_RBX);
@@ -62,5 +62,5 @@
 		}
 		else{
-			SetError();
+			compiler.errorMessenger.OutputFatalError();
 		}
 	}
@@ -103,5 +103,5 @@
 	if( pClass->IsAbstract() ){
 		//抽象クラスだったとき
-		SetError(125,pClass->GetName().c_str(),cp);
+		compiler.errorMessenger.Output(125,pClass->GetName().c_str(),cp);
 	}
 
@@ -113,5 +113,5 @@
 		Type tempType;
 		NumOpe(&reg,objectSizeStr,Type(),tempType);
-		if( !tempType.IsWhole() ) SetError(49,NULL,cp);
+		if( !tempType.IsWhole() ) compiler.errorMessenger.Output(49,NULL,cp);
 
 		//※添え字上限値であることを考慮
@@ -264,5 +264,5 @@
 		return;
 	}
-	if(!( tempType.IsObjectPtr() || tempType.IsVoidPtr() )) SetError(122,NULL,cp);
+	if(!( tempType.IsObjectPtr() || tempType.IsVoidPtr() )) compiler.errorMessenger.Output(122,NULL,cp);
 
 	//sub rax,OBJECT_HEAD_SIZE
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_ProcOp.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_ProcOp.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_ProcOp.cpp	(revision 468)
@@ -119,5 +119,5 @@
 	}
 	else{
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 	}
 }
@@ -164,10 +164,10 @@
 		{
 			if(pGotoLabelSchedule->GetName().size()>0){
-				SetError(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos());
+				compiler.errorMessenger.Output(6,pGotoLabelSchedule->GetName(),pGotoLabelSchedule->GetSourceCodePos());
 			}
 			else{
 				char temporary[255];
 				sprintf(temporary,"%d",pGotoLabelSchedule->GetLineNum());
-				SetError(6,temporary,pGotoLabelSchedule->GetSourceCodePos());
+				compiler.errorMessenger.Output(6,temporary,pGotoLabelSchedule->GetSourceCodePos());
 			}
 		}
@@ -195,5 +195,5 @@
 	}
 	else{
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 	}
 }
@@ -205,5 +205,5 @@
 
 	if( pUserProc->GetLocalVars().size() ){
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 		return;
 	}
@@ -506,5 +506,5 @@
 					}
 					if(!(temporary[0]=='('&&temporary[lstrlen(temporary)-1]==')')){
-						SetError(1,NULL,cp);
+						compiler.errorMessenger.Output(1,NULL,cp);
 					}
 					RemoveStringPare(temporary);
@@ -594,5 +594,5 @@
 	//With情報のメモリを解放
 	for(i3=0;i3<WithInfo.num;i3++){
-		SetError(22,"With",WithInfo.pWithCp[i3]);
+		compiler.errorMessenger.Output(22,"With",WithInfo.pWithCp[i3]);
 		HeapDefaultFree(WithInfo.ppName[i3]);
 	}
@@ -651,5 +651,5 @@
 			SetReg_WholeVariable(returnType,&RelativeVar,REG_RAX);
 		}
-		else SetError(300,NULL,cp);
+		else compiler.errorMessenger.Output(300,NULL,cp);
 	}
 
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Set_Var.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Set_Var.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Set_Var.cpp	(revision 468)
@@ -90,5 +90,5 @@
 	}
 
-	SetError(1,NULL,cp);
+	compiler.errorMessenger.Output(1,NULL,cp);
 }
 
@@ -113,5 +113,5 @@
 	}
 	else if(pRelative->dwKind==VAR_REFGLOBAL){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 	else if(pRelative->dwKind==VAR_LOCAL){
@@ -178,5 +178,5 @@
 	}
 	else if(pRelative->dwKind==VAR_REFGLOBAL){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 	else if(pRelative->dwKind==VAR_LOCAL){
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Statement.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Statement.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Statement.cpp	(revision 468)
@@ -15,5 +15,5 @@
 			//ダブルクォートは不正なのでエラー扱い
 			leftTerm[i]=0;
-			SetError(3,leftTerm,cp);
+			compiler.errorMessenger.Output(3,leftTerm,cp);
 			return;
 		}
@@ -47,5 +47,5 @@
 		(leftTerm[0]==1&&leftTerm[1]==ESC_PSMEM)
 		)){
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		return;
 	}
@@ -75,5 +75,5 @@
 		if(pUserProc){
 			if( !pUserProc->IsMacro() ){
-				SetError(10,Command,cp);
+				compiler.errorMessenger.Output(10,Command,cp);
 			}
 
@@ -90,5 +90,5 @@
 
 	if( pobj_reg ){
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 	}
 	pobj_reg=new CRegister(REG_RAX);
@@ -118,5 +118,5 @@
 
 	// どこにも当てはまらなかったため、失敗
-	SetError(1,NULL,cp);
+	compiler.errorMessenger.Output(1,NULL,cp);
 }
 
@@ -174,5 +174,5 @@
 	for(int i=0;;i++){
 		if(Parameter[i]=='\0'){
-			SetError(21,NULL,cp);
+			compiler.errorMessenger.Output(21,NULL,cp);
 			return;
 		}
@@ -314,5 +314,5 @@
 	compiler.codeGenerator.ContinueAreaBegin();
 
-	if(!Parameter[0]) SetError(10,"While",cp);
+	if(!Parameter[0]) compiler.errorMessenger.Output(10,"While",cp);
 
 	//条件式を実行してフラグをセット
@@ -353,5 +353,5 @@
 	i=GetOneParameter(Parameter,0,temporary);
 	if(!Parameter[i]){
-		SetError(12,"For",cp);
+		compiler.errorMessenger.Output(12,"For",cp);
 		isError = true;
 		goto ErrorStep;
@@ -367,5 +367,5 @@
 		}
 		if(temporary[i2]=='\0'){
-			SetError(12,"For",cp);
+			compiler.errorMessenger.Output(12,"For",cp);
 			isError = true;
 			goto ErrorStep;
@@ -386,5 +386,5 @@
 	if(Parameter[i]){
 		i=GetOneParameter(Parameter,i,StepNum);
-		if(Parameter[i]) SetError(12,"For",cp);
+		if(Parameter[i]) compiler.errorMessenger.Output(12,"For",cp);
 	}
 	else lstrcpy(StepNum,"1");
@@ -450,5 +450,5 @@
 	if(szNextVariable[0]){
 		if(lstrcmp(szNextVariable,variable)!=0){
-			SetError(55,szNextVariable,cp);
+			compiler.errorMessenger.Output(55,szNextVariable,cp);
 		}
 	}
@@ -480,5 +480,5 @@
 	GetCustomToken( variable, Parameter, i, ESC_IN, true );
 	if(!Parameter[i]){
-		SetError(12,"Foreach",cp);
+		compiler.errorMessenger.Output(12,"Foreach",cp);
 		isError = true;
 		goto ErrorStep;
@@ -537,5 +537,5 @@
 	if(szNextVariable[0]){
 		if(lstrcmp(szNextVariable,variable)!=0){
-			SetError(55,szNextVariable,cp);
+			compiler.errorMessenger.Output(55,szNextVariable,cp);
 		}
 	}
@@ -561,5 +561,5 @@
 	int i,i2,i3;
 
-	if(Parameter[0]) SetError(10,"Do",cp);
+	if(Parameter[0]) compiler.errorMessenger.Output(10,"Do",cp);
 
 	//Continueアドレスのバックアップとセット
@@ -641,5 +641,5 @@
 void OpcodeExitSub(void){
 	if( UserProc::IsGlobalAreaCompiling() ){
-		SetError(12,"Exit Sub/Function",cp);
+		compiler.errorMessenger.Output(12,"Exit Sub/Function",cp);
 		return;
 	}
@@ -705,5 +705,5 @@
 			if(basbuf[i]=='\0'){
 				selectSchedules.pop_back();
-				SetError(22,"Select",cp);
+				compiler.errorMessenger.Output(22,"Select",cp);
 				return;
 			}
@@ -893,5 +893,5 @@
 
 	if(selectSchedules.back().typeSize==-1){
-		SetError(30,"Case",cp);
+		compiler.errorMessenger.Output(30,"Case",cp);
 		return;
 	}
@@ -914,9 +914,9 @@
 
 void OpcodeGosub(char *Parameter){
-	SetError(-1,"Gosub ～ Returnステートメントは64ビットコンパイラで利用することはできません。",cp);
+	compiler.errorMessenger.Output(-1,"Gosub ～ Returnステートメントは64ビットコンパイラで利用することはできません。",cp);
 }
 void OpcodeReturn(char *Parameter){
 	if( UserProc::IsGlobalAreaCompiling() ){
-		SetError(62,NULL,cp);
+		compiler.errorMessenger.Output(62,NULL,cp);
 	}
 	else{
@@ -966,5 +966,5 @@
 	i=GetOneParameter(Parameter,0,temporary);
 	if(!Parameter[i]){
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		return;
 	}
@@ -976,5 +976,5 @@
 	}
 	if(!resultType.IsWhole()){
-		SetError(11,Parameter,cp);
+		compiler.errorMessenger.Output(11,Parameter,cp);
 		return;
 	}
@@ -986,5 +986,5 @@
 	i=GetOneParameter(Parameter,i,temporary);
 	if(Parameter[i]){
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		return;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/Compile_Var.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Compile_Var.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Compile_Var.cpp	(revision 468)
@@ -32,5 +32,5 @@
 	NumOpe( &reg, lpPtrOffset, Type(), type );
 	if( !type.IsWhole() ){
-		SetError(46,NULL,cp);
+		compiler.errorMessenger.Output(46,NULL,cp);
 	}
 	ExtendTypeTo64(type.GetBasicType(),reg);
@@ -52,5 +52,5 @@
 	else{
 		//エラー
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		return;
 	}
@@ -153,5 +153,5 @@
 		if( !type.IsWhole() )
 		{
-			SetError(46,NULL,cp);
+			compiler.errorMessenger.Output(46,NULL,cp);
 		}
 		ExtendTypeTo64( type.GetBasicType(), reg );
@@ -211,5 +211,5 @@
 	if( !pMember )
 	{
-		if(isErrorEnabled) SetError(103,VarName,cp);
+		if(isErrorEnabled) compiler.errorMessenger.Output(103,VarName,cp);
 		return false;
 	}
@@ -222,5 +222,5 @@
 		//同一クラスオブジェクトの場合はプライベートアクセスを容認する
 		if(pMember->IsNoneAccess()){
-			if(isErrorEnabled) SetError(107,VarName,cp);
+			if(isErrorEnabled) compiler.errorMessenger.Output(107,VarName,cp);
 			return false;
 		}
@@ -229,9 +229,9 @@
 		if((bPrivateAccess==0&&pMember->IsPrivate())||
 			pMember->IsNoneAccess()){
-			if(isErrorEnabled) SetError(107,VarName,cp);
+			if(isErrorEnabled) compiler.errorMessenger.Output(107,VarName,cp);
 			return false;
 		}
 		else if(bPrivateAccess==0&&pMember->IsProtected()){
-			if(isErrorEnabled) SetError(108,VarName,cp);
+			if(isErrorEnabled) compiler.errorMessenger.Output(108,VarName,cp);
 			return false;
 		}
@@ -245,5 +245,5 @@
 		){
 			//Const定義の変数に書き込みアクセスをしようとした場合
-			SetError(61,VarName,cp);
+			compiler.errorMessenger.Output(61,VarName,cp);
 	}
 
@@ -262,5 +262,5 @@
 	else{
 		if(lpPtrOffset[0]){
-			if(isErrorEnabled) SetError(16,member,cp);
+			if(isErrorEnabled) compiler.errorMessenger.Output(16,member,cp);
 			return false;
 		}
@@ -275,5 +275,5 @@
 		//配列オフセット
 		if(!GetArrayOffset(pMember->GetSubscripts(),array,pMember->GetType())){
-			if(isErrorEnabled) SetError(14,member,cp);
+			if(isErrorEnabled) compiler.errorMessenger.Output(14,member,cp);
 			return false;
 		}
@@ -288,5 +288,5 @@
 		if( resultType.IsObject() || resultType.IsStruct() ){
 			if( refType != RefDot ){
-				if(isErrorEnabled) SetError(104,member,cp);
+				if(isErrorEnabled) compiler.errorMessenger.Output(104,member,cp);
 				return false;
 			}
@@ -304,5 +304,5 @@
 				if( ( resultType.IsObjectPtr() || resultType.IsStructPtr() )
 					&& refType != RefDot ){
-						if(isErrorEnabled) SetError(104,member,cp);
+						if(isErrorEnabled) compiler.errorMessenger.Output(104,member,cp);
 						return false;
 				}
@@ -318,5 +318,5 @@
 				if( (resultType.IsObjectPtr() || resultType.IsStructPtr() )
 					&& refType != RefPointer ){
-						if(isErrorEnabled) SetError(104,member,cp);
+						if(isErrorEnabled) compiler.errorMessenger.Output(104,member,cp);
 						return false;
 				}
@@ -332,5 +332,5 @@
 				//ppObj[n]->member
 				if( refType != RefPointer ){
-					if(isErrorEnabled) SetError(104,member,cp);
+					if(isErrorEnabled) compiler.errorMessenger.Output(104,member,cp);
 					return false;
 				}
@@ -346,5 +346,5 @@
 			}
 			else{
-				if(isErrorEnabled) SetError(104,member,cp);
+				if(isErrorEnabled) compiler.errorMessenger.Output(104,member,cp);
 				return false;
 			}
@@ -427,5 +427,5 @@
 			else{
 				if(lpPtrOffset[0]){
-					SetError(16,variable,cp);
+					compiler.errorMessenger.Output(16,variable,cp);
 					pRelativeVar->dwKind=NON_VAR;
 					return false;
@@ -507,5 +507,5 @@
 			compiler.pCompilingClass->IsCompilingDestructor() == false
 			){
-				SetError(131, NULL, cp );
+				compiler.errorMessenger.Output(131, NULL, cp );
 		}
 
@@ -596,5 +596,5 @@
 		}
 
-		if(isErrorEnabled) SetError(3,variable,cp);
+		if(isErrorEnabled) compiler.errorMessenger.Output(3,variable,cp);
 		pRelativeVar->dwKind=NON_VAR;
 		return false;
@@ -612,5 +612,5 @@
 		else{
 			if(lpPtrOffset[0]){
-				SetError(16,variable,cp);
+				compiler.errorMessenger.Output(16,variable,cp);
 				pRelativeVar->dwKind=NON_VAR;
 				return false;
@@ -638,9 +638,9 @@
 		if( resultType.IsObject() ){
 			//オブジェクト定数
-			SetError(130, VarName, cp );
+			compiler.errorMessenger.Output(130, VarName, cp );
 		}
 		else{
 			//一般のConst変数
-			SetError(61,VarName,cp);
+			compiler.errorMessenger.Output(61,VarName,cp);
 		}
 	}
@@ -666,5 +666,5 @@
 	if(array[0]){
 		if(!GetArrayOffset(*pSubscripts,array,resultType)){
-			SetError(14,variable,cp);
+			compiler.errorMessenger.Output(14,variable,cp);
 			pRelativeVar->dwKind=NON_VAR;
 			return false;
@@ -675,5 +675,5 @@
 			//実態オブジェクトのメンバを参照（obj.member）
 			if( refType != RefDot ){
-				SetError(104,VarName,cp);
+				compiler.errorMessenger.Output(104,VarName,cp);
 				pRelativeVar->dwKind=NON_VAR;
 				return false;
@@ -690,5 +690,5 @@
 				//pObj[n].member
 				if( refType != RefDot ){
-					SetError(104,VarName,cp);
+					compiler.errorMessenger.Output(104,VarName,cp);
 					pRelativeVar->dwKind=NON_VAR;
 					return false;
@@ -700,5 +700,5 @@
 				//pObj->member
 				if( refType != RefPointer ){
-					SetError(104,VarName,cp);
+					compiler.errorMessenger.Output(104,VarName,cp);
 					pRelativeVar->dwKind=NON_VAR;
 					return false;
@@ -717,5 +717,5 @@
 				//ppObj[n]->member
 				if( refType != RefPointer ){
-					SetError(104,VarName,cp);
+					compiler.errorMessenger.Output(104,VarName,cp);
 					pRelativeVar->dwKind=NON_VAR;
 					return false;
@@ -732,5 +732,5 @@
 			}
 			else{
-				SetError(104,VarName,cp);
+				compiler.errorMessenger.Output(104,VarName,cp);
 				pRelativeVar->dwKind=NON_VAR;
 				return false;
@@ -738,5 +738,5 @@
 		}
 		else{
-			SetError(102,VarName,cp);
+			compiler.errorMessenger.Output(102,VarName,cp);
 			pRelativeVar->dwKind=NON_VAR;
 			return false;
@@ -785,5 +785,5 @@
 				while(1){
 					if( subscripts[0] < i2 ){
-						SetError(41,0,cp);
+						compiler.errorMessenger.Output(41,0,cp);
 						return 0;
 					}
@@ -807,5 +807,5 @@
 			BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
 				if(InitBuf[i]=='\0'){
-					SetError(41,0,cp);
+					compiler.errorMessenger.Output(41,0,cp);
 					return false;
 				}
@@ -823,5 +823,5 @@
 		}
 
-		SetError(41,0,cp);
+		compiler.errorMessenger.Output(41,0,cp);
 		return false;
 	}
@@ -833,5 +833,5 @@
 
 	if( subscripts.size() > 0 ){
-		SetError(41,0,cp);
+		compiler.errorMessenger.Output(41,0,cp);
 		return false;
 	}
@@ -947,5 +947,5 @@
 				while(1){
 					if( subscripts[0] < i2 ){
-						SetError(41,0,cp);
+						compiler.errorMessenger.Output(41,0,cp);
 						return 0;
 					}
@@ -969,5 +969,5 @@
 			BOOST_FOREACH( CMember *pMember, objClass.GetDynamicMembers() ){
 				if(InitBuf[i]=='\0'){
-					SetError(41,0,cp);
+					compiler.errorMessenger.Output(41,0,cp);
 					return false;
 				}
@@ -987,5 +987,5 @@
 		}
 
-		SetError(41,0,cp);
+		compiler.errorMessenger.Output(41,0,cp);
 		return false;
 	}
@@ -997,5 +997,5 @@
 
 	if( subscripts.size() > 0 ){
-		SetError(41,0,cp);
+		compiler.errorMessenger.Output(41,0,cp);
 		return false;
 	}
@@ -1113,5 +1113,5 @@
 		if( UserProc::CompilingUserProc().GetLocalVars().DuplicateCheck( VarName ) ){
 			//２重定義のエラー
-			SetError(15,VarName,cp);
+			compiler.errorMessenger.Output(15,VarName,cp);
 			return;
 		}
@@ -1227,5 +1227,5 @@
 		else{
 			if( subscripts.size() > 1 ){
-				SetError(300,NULL,cp);
+				compiler.errorMessenger.Output(300,NULL,cp);
 			}
 			sprintf( objectSize, "%d", subscripts[0] );
@@ -1237,5 +1237,5 @@
 		GetVarOffset( true, false, VarName, &RelativeVar, tempType );
 		if( RelativeVar.dwKind == VAR_DIRECTMEM ){
-			SetError();
+			compiler.errorMessenger.OutputFatalError();
 		}
 		SetVariableFromRax( Type( DEF_OBJECT, *compiler.GetObjectModule().meta.GetClasses().GetObjectClassPtr() ), DEF_OBJECT, &RelativeVar );
@@ -1243,5 +1243,5 @@
 }
 void SetVarPtrToReg(int reg,RELATIVE_VAR *pRelativeVar){
-	if(!IsGeneralReg(reg)) SetError(300,NULL,cp);
+	if(!IsGeneralReg(reg)) compiler.errorMessenger.Output(300,NULL,cp);
 
 	if(pRelativeVar->dwKind==VAR_GLOBAL){
@@ -1319,5 +1319,5 @@
 	const UserProc *pUserProc_AddGlobalRootPtr = GetClassMethod( "_System_CGarbageCollection", "AddGlobalRootPtr" );
 	if( !pUserProc_AddGlobalRootPtr ){
-		SetError(3, "_System_CGarbageCollection.AddGlobalRootPtr", -1 );
+		compiler.errorMessenger.Output(3, "_System_CGarbageCollection.AddGlobalRootPtr", -1 );
 		return false;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/MakePeHdr.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 468)
@@ -94,5 +94,4 @@
 	extern int obp_AllocSize;
 	extern char *basbuf;
-	extern char OutputFileName[MAX_PATH];
 	int i,i2,i3,i4,i5;
 	char temporary[MAX_PATH],*temp2;
@@ -325,5 +324,5 @@
 		// 名前空間が初期化されているかをチェック
 		if( compiler.GetNamespaceSupporter().GetLivingNamespaceScopes().size() ){
-			SetError();
+			compiler.errorMessenger.OutputFatalError();
 		}
 
@@ -409,5 +408,5 @@
 		//With情報のメモリを解放
 		for(i=0;i<WithInfo.num;i++){
-			SetError(22,"With",WithInfo.pWithCp[i]);
+			compiler.errorMessenger.Output(22,"With",WithInfo.pWithCp[i]);
 			HeapDefaultFree(WithInfo.ppName[i]);
 		}
@@ -417,5 +416,5 @@
 		// 名前空間が正しく閉じられているかをチェック
 		if( compiler.GetNamespaceSupporter().GetLivingNamespaceScopes().size() ){
-			SetError(63,NULL,-1);
+			compiler.errorMessenger.Output(63,NULL,-1);
 		}
 
@@ -467,9 +466,9 @@
 
 		// 格納先ディレクトリを作る
-		Jenga::Common::Path path( OutputFileName );
+		Jenga::Common::Path path( program.GetOutputFilePath() );
 		Jenga::Common::Directory dir( path.GetDriveName() + path.GetDirName(), true );
 
 		// 書き込む
-		if( !compiler.GetObjectModule().Write( OutputFileName ) )
+		if( !compiler.GetObjectModule().Write( program.GetOutputFilePath() ) )
 		{
 			MessageBox(0,"XML書き込みに失敗","test",0);
@@ -478,8 +477,7 @@
 	}
 
-	extern BOOL bError;
-	if( !bError )
+	if( !compiler.errorMessenger.HasError() )
 	{
-		CompileMessage( "リンク中..." );
+		compiler.messenger.Output( "リンク中..." );
 	}
 
@@ -522,7 +520,6 @@
 		hLib=LoadLibrary( pDllProc->GetDllFileName().c_str() );
 		if(!hLib){
-			extern char OutputFileName[MAX_PATH];
 			char temp2[MAX_PATH],temp3[MAX_PATH];
-			_splitpath(OutputFileName,temp2,temp3,NULL,NULL);
+			_splitpath(program.GetOutputFilePath().c_str(),temp2,temp3,NULL,NULL);
 			lstrcat(temp2,temp3);
 			lstrcpy(temp3,pDllProc->GetDllFileName().c_str());
@@ -531,5 +528,5 @@
 
 			if(!hLib){
-				SetError(-106,pDllProc->GetDllFileName().c_str(),pDllProc->GetCodePos());
+				compiler.errorMessenger.Output(-106,pDllProc->GetDllFileName().c_str(),pDllProc->GetCodePos());
 			}
 		}
@@ -538,5 +535,5 @@
 			if(!GetProcAddress(hLib,pDllProc->GetAlias().c_str())){
 				FreeLibrary(hLib);
-				SetError(-107,pDllProc->GetAlias(),pDllProc->GetCodePos());
+				compiler.errorMessenger.Output(-107,pDllProc->GetAlias(),pDllProc->GetCodePos());
 			}
 			FreeLibrary(hLib);
@@ -574,5 +571,5 @@
 
 	if(bUse_ExportSection){
-		_splitpath(OutputFileName,NULL,NULL,lpExportNames,temporary);
+		_splitpath(program.GetOutputFilePath().c_str(),NULL,NULL,lpExportNames,temporary);
 		lstrcat(lpExportNames,temporary);
 		ExportNamesLength=lstrlen(lpExportNames)+1;
@@ -700,5 +697,5 @@
 
 		if( pDllProc->GetDllFileName().size() > 16 ){
-			SetError(7,NULL,cp);
+			compiler.errorMessenger.Output(7,NULL,cp);
 			break;
 		}
@@ -832,12 +829,11 @@
 	CDebugSection *pobj_DebugSection;
 	pobj_DebugSection=new CDebugSection();
-	extern BOOL bError;
-	if( compiler.IsDebug() && bError == 0 )
+	if( compiler.IsDebug() && !compiler.errorMessenger.HasError() )
 	{
-		CompileMessage( "デバッグ情報を生成しています。" );
+		compiler.messenger.Output( "デバッグ情報を生成しています。" );
 
 		pobj_DebugSection->make();
 
-		CompileMessage( "デバッグ情報の生成が完了しました。" );
+		compiler.messenger.Output( "デバッグ情報の生成が完了しました。" );
 	}
 
@@ -1121,6 +1117,8 @@
 
 
-	extern BOOL bError;
-	if(bError) goto EndWriteOpcode;
+	if( compiler.errorMessenger.HasError() )
+	{
+		goto EndWriteOpcode;
+	}
 
 
@@ -1411,7 +1409,7 @@
 
 
-	hFile=CreateFile(OutputFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
+	hFile=CreateFile(program.GetOutputFilePath().c_str(),GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
 	if(hFile==INVALID_HANDLE_VALUE){
-		SetError(53,OutputFileName,-1);
+		compiler.errorMessenger.Output(53,program.GetOutputFilePath().c_str(),-1);
 		goto EndWriteOpcode;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/NumOpe.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/NumOpe.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/NumOpe.cpp	(revision 468)
@@ -177,5 +177,5 @@
 				// オブジェクトメンバのポインタをraxにコピー
 				if( !VarToReg( tempRelativeVar, baseType, resultType ) ){
-					SetError(11,termFull,cp);
+					compiler.errorMessenger.Output(11,termFull,cp);
 				}
 			}
@@ -220,5 +220,5 @@
 			if( !leftType.IsStruct() )
 			{
-				SetError();
+				compiler.errorMessenger.OutputFatalError();
 			}
 
@@ -344,5 +344,5 @@
 	{
 		// 関数ポインタ
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 
 		///////////////////////////////////////////////////////////////////
@@ -354,5 +354,5 @@
 	}
 
-	SetError();
+	compiler.errorMessenger.OutputFatalError();
 
 	return false;
@@ -412,5 +412,5 @@
 			if( isProcedureCallOnly )
 			{
-				SetError(1,NULL,cp);
+				compiler.errorMessenger.Output(1,NULL,cp);
 			}
 			return false;
@@ -444,5 +444,5 @@
 		if( compiler.pCompilingClass == NULL )
 		{
-			SetError(142,NULL,cp);
+			compiler.errorMessenger.Output(142,NULL,cp);
 			return false;
 		}
@@ -475,5 +475,5 @@
 			//閉じカッコ")"に続く文字がNULLでないとき
 			if(termFull[i2+1+i4+1]!='\0'){
-				SetError(42,NULL,cp);
+				compiler.errorMessenger.Output(42,NULL,cp);
 			}
 
@@ -537,5 +537,5 @@
 
 				//閉じカッコ")"に続く文字がNULLでないときはエラーにする
-				if(termFull[i2+1+i4+1]!='\0') SetError(42,NULL,cp);
+				if(termFull[i2+1+i4+1]!='\0') compiler.errorMessenger.Output(42,NULL,cp);
 
 				//マクロ関数の場合
@@ -658,5 +658,5 @@
 	if( isProcedureCallOnly )
 	{
-		SetError(3, termLeft, cp );
+		compiler.errorMessenger.Output(3, termLeft, cp );
 	}
 
@@ -687,5 +687,5 @@
 		// 変数の場合はeaxに変数ポインタを格納する
 		if( !VarToReg( relativeVar, baseType, resultType ) ){
-			SetError(11,term,cp);
+			compiler.errorMessenger.Output(11,term,cp);
 		}
 	}
@@ -715,5 +715,5 @@
 	if( pobj_reg )
 	{
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 	}
 
@@ -726,5 +726,5 @@
 	if( !isVariable )
 	{
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 	}
 
@@ -753,5 +753,5 @@
 
 	if(expression[0]=='\0'){
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		return false;
 	}
@@ -836,5 +836,5 @@
 
 			if( pobj_BlockReg->check(REG_RAX) ){
-				SetError();
+				compiler.errorMessenger.OutputFatalError();
 			}
 
@@ -937,5 +937,5 @@
 						else GetCalcName(idCalc,temp2);
 						sprintf(temporary,"Operator %s",temp2);
-						SetError(27,temporary,cp);
+						compiler.errorMessenger.Output(27,temporary,cp);
 						goto error;
 					}
@@ -971,5 +971,5 @@
 					}
 					else{
-						SetError(3, term, cp );
+						compiler.errorMessenger.Output(3, term, cp );
 						goto error;
 					}
@@ -997,5 +997,5 @@
 						// 拡張版リテラル文字列（エスケープシーケンス可能）
 						if(!RemoveStringQuotes(term+2)){
-							SetError(43,NULL,cp);
+							compiler.errorMessenger.Output(43,NULL,cp);
 							goto error;
 						}
@@ -1007,5 +1007,5 @@
 						// 通常文字列
 						if(!RemoveStringQuotes(term)){
-							SetError(43,NULL,cp);
+							compiler.errorMessenger.Output(43,NULL,cp);
 							goto error;
 						}
@@ -1066,5 +1066,5 @@
 								}
 							}
-							SetError(38,term,cp);
+							compiler.errorMessenger.Output(38,term,cp);
 
 							goto error;
@@ -1080,5 +1080,5 @@
 						if( resultType.GetBasicType() & FLAG_CAST ){
 							// 型名のみ
-							SetError();
+							compiler.errorMessenger.OutputFatalError();
 						}
 						else{
@@ -1190,5 +1190,5 @@
 						}
 						else{
-							SetError(1,NULL,0);
+							compiler.errorMessenger.Output(1,NULL,0);
 							goto error;
 						}
@@ -1198,5 +1198,5 @@
 					//該当する識別子が見当たらないときはエラー扱いにする
 					bError=1;
-					SetError(3,term,cp);
+					compiler.errorMessenger.Output(3,term,cp);
 					type_stack[sp]=DEF_DOUBLE;
 				}
@@ -1235,5 +1235,5 @@
 
 						if(XmmReg==REG_XMM4){
-							SetError();		// TODO: 未実装
+							compiler.errorMessenger.OutputFatalError();		// TODO: 未実装
 							//push term
 							//compiler.codeGenerator.op_push_value(i32data);
@@ -1333,5 +1333,5 @@
 				if( PTR_LEVEL( type_stack[sp-1] ) <= 0 ){
 					//ポインタ型ではないとき
-					SetError( 3, NULL, cp );
+					compiler.errorMessenger.Output( 3, NULL, cp );
 					goto error;
 				}
@@ -1342,5 +1342,5 @@
 
 			default:
-				SetError(300,NULL,cp);
+				compiler.errorMessenger.Output(300,NULL,cp);
 				goto error;
 		}
@@ -1350,10 +1350,10 @@
 
 	if(sp!=1){
-		SetError(1,NULL,cp);
+		compiler.errorMessenger.Output(1,NULL,cp);
 		goto error;
 	}
 
 	if(bLiteralCalculation){
-		SetError();
+		compiler.errorMessenger.OutputFatalError();
 	}
 	else{
Index: trunk/ab5.0/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/NumOpe_Arithmetic.cpp	(revision 468)
@@ -178,5 +178,5 @@
 	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
 		//実数演算は行えないため、エラー扱い
-		SetError(45,"mod",cp);
+		compiler.errorMessenger.Output(45,"mod",cp);
 		return 0;
 	}
@@ -357,5 +357,5 @@
 	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
 		//実数演算は行えないため、エラー扱い
-		SetError(45,"mod",cp);
+		compiler.errorMessenger.Output(45,"mod",cp);
 		return 0;
 	}
@@ -625,5 +625,5 @@
 	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
 		//いずれかの項が実数のとき
-		SetError(45,"<<",cp);
+		compiler.errorMessenger.Output(45,"<<",cp);
 		return 0;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/NumOpe_Logical.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/NumOpe_Logical.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/NumOpe_Logical.cpp	(revision 468)
@@ -15,5 +15,5 @@
 	if(IsRealNumberType(type[sp-2])||IsRealNumberType(type[sp-1])){
 		//いずれかの項が実数のとき
-		SetError(45,"xor",cp);
+		compiler.errorMessenger.Output(45,"xor",cp);
 		return 0;
 	}
@@ -94,5 +94,5 @@
 	if(IsRealNumberType(type[sp-1])){
 		//実数のとき
-		SetError(45,"Not",cp);
+		compiler.errorMessenger.Output(45,"Not",cp);
 		return 0;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/NumOpe_TypeOperation.cpp	(revision 468)
@@ -264,5 +264,5 @@
 	}
 	else{
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 
@@ -499,5 +499,5 @@
 	int castBasicType = type[sp-1];
 	if((castBasicType&FLAG_CAST)==0){
-		SetError(47,NULL,cp);
+		compiler.errorMessenger.Output(47,NULL,cp);
 		return 0;
 	}
Index: trunk/ab5.0/abdev/BasicCompiler64/OperatorProc.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/OperatorProc.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/OperatorProc.cpp	(revision 468)
@@ -7,5 +7,5 @@
 
 void FreeTempObject(int reg,const CClass *pobj_c){
-	if(!IsSafeReg(reg)) SetError(300,NULL,cp);
+	if(!IsSafeReg(reg)) compiler.errorMessenger.Output(300,NULL,cp);
 
 	////////////////////////////////////////////////
@@ -293,5 +293,5 @@
 		if(bCalcUseHeap){
 			//未解放のインスタンスが存在する旨を示す警告
-			SetError(-105,NULL,cp);
+			compiler.errorMessenger.Output(-105,NULL,cp);
 		}
 
@@ -325,5 +325,5 @@
 
 	//エラーを発行
-	SetError(-1,"キャスト演算子がオーバーロードされていません。",cp);
+	compiler.errorMessenger.Output(-1,"キャスト演算子がオーバーロードされていません。",cp);
 }
 
Index: trunk/ab5.0/abdev/BasicCompiler64/Register.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/Register.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/Register.cpp	(revision 468)
@@ -20,5 +20,5 @@
 void CBlockReg::lock(int reg){
 	if(check(reg)){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 	array_BlockReg[num++]=reg;
@@ -136,5 +136,5 @@
 
 		//エラーチェック
-		if(pobj_BlockReg->check(AnswerReg)) SetError(300,NULL,cp);
+		if(pobj_BlockReg->check(AnswerReg)) compiler.errorMessenger.Output(300,NULL,cp);
 	}
 
@@ -186,5 +186,5 @@
 void CRegister::bug_check(){
 	if(init_sp_reg!=sp_UseReg||
-		init_sp_xmm_reg!=sp_XmmReg) SetError(300,NULL,cp);
+		init_sp_xmm_reg!=sp_XmmReg) compiler.errorMessenger.Output(300,NULL,cp);
 }
 int CRegister::GetNextReg(){
Index: trunk/ab5.0/abdev/BasicCompiler64/stack_frame.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/stack_frame.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/stack_frame.cpp	(revision 468)
@@ -118,5 +118,5 @@
 void StackFrame::error_check(){
 	if(now_sp){
-		SetError(300,NULL,cp);
+		compiler.errorMessenger.Output(300,NULL,cp);
 	}
 }
Index: trunk/ab5.0/abdev/BasicCompiler64/stdafx.h
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler64/stdafx.h	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler64/stdafx.h	(revision 468)
@@ -5,4 +5,5 @@
 #include <vector>
 #include <fstream>
+#include <iostream>
 
 #include <windows.h>
@@ -14,5 +15,5 @@
 #include <limits.h>
 #include <shlobj.h>
-#include <iostream>
+#include <process.h>
 
 //boost libraries
@@ -22,4 +23,5 @@
 #include <jenga/include/common/File.h>
 #include <jenga/include/common/CmdLine.h>
+#include <jenga/include/common/Path.h>
 
 #include "../BasicCompiler_Common/common.h"
@@ -29,2 +31,3 @@
 #include <Program.h>
 #include <Compiler.h>
+#include <Debugger.h>
Index: trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp
===================================================================
--- trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp	(revision 467)
+++ trunk/ab5.0/abdev/BasicCompiler_Common/src/Messenger.cpp	(revision 468)
@@ -31,5 +31,5 @@
 	extern HWND hMainDlg;
 	int index = GetWindowTextLength(GetDlgItem(hMainDlg,IDC_ERRORLIST));
-	return SendMessage(GetDlgItem(hMainDlg,IDC_ERRORLIST),EM_LINEFROMCHAR,index,0);
+	return static_cast<int>(SendMessage(GetDlgItem(hMainDlg,IDC_ERRORLIST),EM_LINEFROMCHAR,index,0));
 }
 
