Index: /trunk/ab5.0/abdev/ab_common/ab_common.vcproj
===================================================================
--- /trunk/ab5.0/abdev/ab_common/ab_common.vcproj	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/ab_common.vcproj	(revision 640)
@@ -534,4 +534,8 @@
 				</File>
 				<File
+					RelativePath=".\include\Lexical\Resolver.h"
+					>
+				</File>
+				<File
 					RelativePath=".\include\Lexical\Source.h"
 					>
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Class.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Class.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Class.h	(revision 640)
@@ -147,4 +147,21 @@
 		return false;
 	}
+	bool Equals( const CClass *pClass ) const
+	{
+		// ポインタが等しいかどうかを見てみる
+		if( this == pClass )
+		{
+			return true;
+		}
+		else if( this->IsNeedResolve() || pClass->IsNeedResolve() )
+		{
+			// 依存関係解決前の状態であれば、パスが等しいかどうかを見てみる
+			if( this->IsDuplication( pClass ) )
+			{
+				return true;
+			}
+		}
+		return false;
+	}
 
 	virtual void Using() const;
@@ -466,5 +483,5 @@
 	void GetReferenceOffsetsInitializeBuffer( std::string &referenceOffsetsBuffer, int &numOfReference, int baseOffset = 0 ) const;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Const.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Const.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Const.h	(revision 640)
@@ -1,5 +1,5 @@
 #pragma once
 
-//定数
+//è
 class CConst
 	: public RelationalObjectModuleItem
@@ -9,5 +9,5 @@
 	_int64 i64data;
 
-	// XMLシリアライズ用
+	// XMLVACYp
 private:
 	friend class boost::serialization::access;
@@ -66,9 +66,9 @@
 	double GetDoubleData();
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 class Consts : public Jenga::Common::Hashmap<CConst>
 {
-	// XMLシリアライズ用
+	// XMLVACYp
 private:
 	friend class boost::serialization::access;
@@ -96,5 +96,5 @@
 };
 
-//定数マクロ
+//è}N
 class ConstMacro
 	: public RelationalObjectModuleItem
@@ -104,5 +104,5 @@
 	std::string expression;
 
-	// XMLシリアライズ用
+	// XMLVACYp
 private:
 	friend class boost::serialization::access;
@@ -154,10 +154,10 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 class ConstMacros
 	: public Jenga::Common::Hashmap<ConstMacro>
 {
-	// XMLシリアライズ用
+	// XMLVACYp
 private:
 	friend class boost::serialization::access;
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/DataTable.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/DataTable.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/DataTable.h	(revision 640)
@@ -150,4 +150,4 @@
 	void ResetDataSectionBaseOffset( long dataSectionBaseOffset );
 
-	void Resolve( const ObjectModule &resolver );
+	void Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Delegate.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Delegate.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Delegate.h	(revision 640)
@@ -33,4 +33,7 @@
 
 		ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
+		ar & BOOST_SERIALIZATION_NVP( paramStr );
+		ar & BOOST_SERIALIZATION_NVP( returnTypeName );
+		ar & BOOST_SERIALIZATION_NVP( sourceIndex );
 		ar & BOOST_SERIALIZATION_NVP( dynamicParams );
 	}
@@ -92,5 +95,5 @@
 	bool IsSimilar( const Delegate &dgt ) const;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 typedef Jenga::Common::Hashmap<Delegate> Delegates;
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Interface.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Interface.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Interface.h	(revision 640)
@@ -90,7 +90,9 @@
 	}
 
+	bool Equals( const Interface *pInterface ) const;
+
 	std::string GetFullNameWithActualGenericTypeParameters() const;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 typedef std::vector<Interface *> Interfaces;
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Member.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Member.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Member.h	(revision 640)
@@ -77,5 +77,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 typedef std::vector<Member *> Members;
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Meta.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Meta.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Meta.h	(revision 640)
@@ -162,4 +162,4 @@
 	const CClass *FindClassSupportedTypeDef( const Symbol &symbol );
 
-	void Resolve( const ObjectModule &resolver );
+	void Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Method.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Method.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Method.h	(revision 640)
@@ -49,5 +49,5 @@
 	virtual void SetNotUseMark( bool isNotUse ) = 0;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 
@@ -159,5 +159,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 BOOST_CLASS_EXPORT( DynamicMethod );
@@ -235,5 +235,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 BOOST_CLASS_EXPORT( StaticMethod );
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/NativeCode.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/NativeCode.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/NativeCode.h	(revision 640)
@@ -117,5 +117,5 @@
 	const ::CClass &GetClass() const;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 typedef std::vector<Schedule> Schedules;
@@ -249,4 +249,4 @@
 	void ResetRelationalObjectModuleIndex( const std::vector<int> &relationTable );
 
-	void Resolve( const ObjectModule &resolver );
+	void Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/ObjectModule.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/ObjectModule.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/ObjectModule.h	(revision 640)
@@ -65,5 +65,5 @@
 
 	// 依存関係の解決を行う
-	void Resolve();
+	void Resolve( ResolveErrors &resolveErrors );
 
 	// 下記の関連になるようなテーブルを取得する
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Procedure.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Procedure.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Procedure.h	(revision 640)
@@ -111,5 +111,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 
@@ -161,4 +161,5 @@
 		ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
 		ar & boost::serialization::make_nvp("pParentClass", const_cast<CClass *&>(pParentClass) );
+		ar & boost::serialization::make_nvp("pInterface", const_cast<Interface *&>(pInterface) );
 
 		if( ActiveBasic::Common::Environment::IsRemoveExternal() )
@@ -173,5 +174,4 @@
 		ar & BOOST_SERIALIZATION_NVP( _paramStr );
 		ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
-		ar & boost::serialization::make_nvp("pInterface", const_cast<Interface *&>(pInterface) );
 		ar & BOOST_SERIALIZATION_NVP( pMethod );
 		ar & BOOST_SERIALIZATION_NVP( isMacro );
@@ -209,9 +209,18 @@
 	virtual bool IsDuplication( const UserProc *pUserProc ) const
 	{
-		if( this->GetParentClassPtr() == pUserProc->GetParentClassPtr()	// 親クラスが等しい
-			&& this->pInterface == pUserProc->pInterface				// インターフェイスが等しい
-			&& pUserProc->IsEqualSymbol( *this )						// 名前空間及び名前が等しい
-			&& this->Params().Equals( pUserProc->Params() )				// パラメータが等しい
-			&& this->returnType.Equals( pUserProc->returnType ) )		// 戻り値が等しい
+		bool isEqualParentClass =
+			this->HasParentClass() && pUserProc->HasParentClass()
+			? this->GetParentClassPtr()->Equals( pUserProc->GetParentClassPtr() )
+			: this->GetParentClassPtr() == pUserProc->GetParentClassPtr();
+		bool isEqualInterface =
+			this->pInterface && pUserProc->pInterface
+			? this->pInterface->Equals( pUserProc->pInterface )
+			: this->pInterface == pUserProc->pInterface;
+
+		if( isEqualParentClass										// 親クラスが等しい
+			&& isEqualInterface										// インターフェイスが等しい
+			&& pUserProc->IsEqualSymbol( *this )					// 名前空間及び名前が等しい
+			&& this->Params().Equals( pUserProc->Params() )			// パラメータが等しい
+			&& this->returnType.Equals( pUserProc->returnType ) )	// 戻り値が等しい
 		{
 			return true;
@@ -376,5 +385,5 @@
 	const CMethod &GetMethod() const;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 
 	static const UserProc *pGlobalProc;
@@ -484,5 +493,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 class DllProcs : public Jenga::Common::Hashmap<DllProc>
@@ -525,5 +534,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/RelationalObjectModuleItem.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/RelationalObjectModuleItem.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/RelationalObjectModuleItem.h	(revision 640)
@@ -68,5 +68,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver ) = 0;
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors ) = 0;
 };
 
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Resolver.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Resolver.h	(revision 640)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Resolver.h	(revision 640)
@@ -0,0 +1,37 @@
+#pragma once
+
+namespace ActiveBasic{ namespace Common{ namespace Lexical{
+
+
+class ResolveError
+{
+	int relationalObjectModuleIndex;
+	std::string targetItemName;
+public:
+	ResolveError( int relationalObjectModuleIndex, const std::string targetItemName )
+		: relationalObjectModuleIndex( relationalObjectModuleIndex )
+		, targetItemName( targetItemName )
+	{
+	}
+
+	int GetRelationalObjectModuleIndex() const
+	{
+		return relationalObjectModuleIndex;
+	}
+	const std::string &GetTargetItemName() const
+	{
+		return targetItemName;
+	}
+};
+class ResolveErrors
+	: public std::vector<ResolveError>
+{
+public:
+	void Add( const ResolveError &resolveError )
+	{
+		this->push_back( resolveError );
+	}
+};
+
+
+}}}
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Template.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Template.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Template.h	(revision 640)
@@ -47,5 +47,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Type.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Type.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Type.h	(revision 640)
@@ -230,5 +230,5 @@
 	std::string ToString() const;
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 
 
@@ -311,5 +311,5 @@
 {
 	Type basicType;
-	CClass *pClass;
+	const CClass *pClass;
 
 	// XMLシリアライズ用
@@ -321,9 +321,9 @@
 
 		ar & BOOST_SERIALIZATION_NVP( basicType );
-		ar & BOOST_SERIALIZATION_NVP( pClass );
-	}
-
-public:
-	BlittableType( const Type &basicType, CClass *pClass )
+		ar & boost::serialization::make_nvp("pClass", const_cast<CClass *&>(pClass) );
+	}
+
+public:
+	BlittableType( const Type &basicType, const CClass *pClass )
 		: basicType( basicType )
 		, pClass( pClass )
@@ -342,4 +342,6 @@
 	}
 	const std::string GetCreateStaticMethodFullName() const;
+
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 class BlittableTypes : public std::vector<BlittableType>
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/TypeDef.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/TypeDef.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/TypeDef.h	(revision 640)
@@ -51,5 +51,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 };
 
Index: /trunk/ab5.0/abdev/ab_common/include/Lexical/Variable.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/Lexical/Variable.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/Lexical/Variable.h	(revision 640)
@@ -175,5 +175,5 @@
 	}
 
-	virtual bool Resolve( const ObjectModule &resolver );
+	virtual bool Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors );
 
 
Index: /trunk/ab5.0/abdev/ab_common/include/ab_common.h
===================================================================
--- /trunk/ab5.0/abdev/ab_common/include/ab_common.h	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/include/ab_common.h	(revision 640)
@@ -8,4 +8,5 @@
 #include "Lexical/NamespaceSupporter.h"
 #include "Lexical/Symbol.h"
+#include "Lexical/Resolver.h"
 #include "Lexical/RelationalObjectModuleItem.h"
 #include "Lexical/Prototype.h"
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp	(revision 640)
@@ -869,10 +869,10 @@
 }
 
-bool CClass::Resolve( const ObjectModule &resolver )
+bool CClass::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	// 型パラメータ
 	BOOST_FOREACH( GenericType &genericType, formalGenericTypes )
 	{
-		genericType.GetType().Resolve( resolver );
+		genericType.GetType().Resolve( resolver, resolveErrors );
 	}
 
@@ -882,5 +882,13 @@
 		if( this->pSuperClass->IsNeedResolve() )
 		{
-			this->pSuperClass = resolver.meta.GetClasses().FindEx( *pSuperClass );
+			const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pSuperClass );
+			if( pTempClass )
+			{
+				this->pSuperClass = pTempClass;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pSuperClass->GetRelationalObjectModuleIndex(), this->pSuperClass->GetFullName() ) );
+			}
 		}
 	}
@@ -889,14 +897,14 @@
 	BOOST_FOREACH( Type &superClassActualTypeParameter, superClassActualTypeParameters )
 	{
-		superClassActualTypeParameter.Resolve( resolver );
+		superClassActualTypeParameter.Resolve( resolver, resolveErrors );
 	}
 
 	// Blittable型情報
-	blittableType.Resolve( resolver );
+	blittableType.Resolve( resolver, resolveErrors );
 
 	// 実装するインターフェイス
 	BOOST_FOREACH( ::Interface *pInterface, interfaces )
 	{
-		pInterface->Resolve( resolver );
+		pInterface->Resolve( resolver, resolveErrors );
 	}
 
@@ -904,5 +912,5 @@
 	BOOST_FOREACH( Member *pMember, dynamicMembers )
 	{
-		pMember->Resolve( resolver );
+		pMember->Resolve( resolver, resolveErrors );
 	}
 
@@ -910,5 +918,5 @@
 	BOOST_FOREACH( Member *pMember, staticMembers )
 	{
-		pMember->Resolve( resolver );
+		pMember->Resolve( resolver, resolveErrors );
 	}
 
@@ -916,5 +924,5 @@
 	BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() )
 	{
-		pMethod->Resolve( resolver );
+		pMethod->Resolve( resolver, resolveErrors );
 	}
 
@@ -922,5 +930,5 @@
 	BOOST_FOREACH( CMethod *pMethod, staticMethods )
 	{
-		pMethod->Resolve( resolver );
+		pMethod->Resolve( resolver, resolveErrors );
 	}
 
@@ -928,5 +936,5 @@
 	BOOST_FOREACH( ActiveBasic::Common::Lexical::ExpandedTemplateClass *pExpandedTemplateClass, expandedTemplateClasses )
 	{
-		pExpandedTemplateClass->Resolve( resolver );
+		pExpandedTemplateClass->Resolve( resolver, resolveErrors );
 	}
 
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Const.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Const.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Const.cpp	(revision 640)
@@ -7,7 +7,7 @@
 }
 
-bool CConst::Resolve( const ObjectModule &resolver )
+bool CConst::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	type.Resolve( resolver );
+	type.Resolve( resolver, resolveErrors );
 	return true;
 }
@@ -78,5 +78,5 @@
 }
 
-bool ConstMacro::Resolve( const ObjectModule &resolver )
+bool ConstMacro::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	// 依存関係を解決すべきメンバは無い
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/DataTable.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/DataTable.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/DataTable.cpp	(revision 640)
@@ -78,9 +78,9 @@
 }
 
-void DataTable::Resolve( const ObjectModule &resolver )
+void DataTable::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	BOOST_FOREACH( Schedule &schedule, schedules )
 	{
-		schedule.Resolve( resolver );
+		schedule.Resolve( resolver, resolveErrors );
 	}
 }
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Delegate.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Delegate.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Delegate.cpp	(revision 640)
@@ -19,11 +19,11 @@
 }
 
-bool Delegate::Resolve( const ObjectModule &resolver )
+bool Delegate::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	Procedure::Resolve( resolver );
+	Procedure::Resolve( resolver, resolveErrors );
 
 	BOOST_FOREACH( Parameter *pParameter, dynamicParams )
 	{
-		pParameter->Resolve( resolver );
+		pParameter->Resolve( resolver, resolveErrors );
 	}
 
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Interface.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Interface.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Interface.cpp	(revision 640)
@@ -33,4 +33,22 @@
 }
 
+bool Interface::Equals( const Interface *pInterface ) const
+{
+	// ポインタが等しいかどうかを見てみる
+	if( this == pInterface )
+	{
+		return true;
+	}
+	else if( this->pInterfaceClass->IsNeedResolve() || pInterface->pInterfaceClass->IsNeedResolve() )
+	{
+		// 依存関係解決前の状態であれば、パスが等しいかどうかを見てみる
+		if( this-pInterfaceClass->IsDuplication( pInterface->pInterfaceClass ) )
+		{
+			return true;
+		}
+	}
+	return false;
+}
+
 std::string Interface::GetFullNameWithActualGenericTypeParameters() const
 {
@@ -53,10 +71,10 @@
 }
 
-bool Interface::Resolve( const ObjectModule &resolver )
+bool Interface::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	// 動的メソッド
 	BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() )
 	{
-		pMethod->Resolve( resolver );
+		pMethod->Resolve( resolver, resolveErrors );
 	}
 
@@ -66,5 +84,13 @@
 		if( this->pInterfaceClass->IsNeedResolve() )
 		{
-			this->pInterfaceClass = resolver.meta.GetClasses().FindLike( pInterfaceClass );
+			const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pInterfaceClass );
+			if( pTempClass )
+			{
+				this->pInterfaceClass = pTempClass;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pInterfaceClass->GetRelationalObjectModuleIndex(), this->pInterfaceClass->GetFullName() ) );
+			}
 		}
 	}
@@ -72,5 +98,5 @@
 	BOOST_FOREACH( Type &actualTypeParameter, actualTypeParameters )
 	{
-		actualTypeParameter.Resolve( resolver );
+		actualTypeParameter.Resolve( resolver, resolveErrors );
 	}
 
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Member.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Member.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Member.cpp	(revision 640)
@@ -41,7 +41,7 @@
 }
 
-bool Member::Resolve( const ObjectModule &resolver )
+bool Member::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	type.Resolve( resolver );
+	type.Resolve( resolver, resolveErrors );
 	return true;
 }
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp	(revision 640)
@@ -253,5 +253,5 @@
 }
 
-void Meta::Resolve( const ObjectModule &resolver )
+void Meta::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	// 関数・メソッド
@@ -261,5 +261,5 @@
 	{
 		UserProc *pUserProc = this->GetUserProcs().Iterator_GetNext();
-		pUserProc->Resolve( resolver );
+		pUserProc->Resolve( resolver, resolveErrors );
 	}
 
@@ -270,5 +270,5 @@
 	{
 		DllProc *pDllProc = this->GetDllProcs().Iterator_GetNext();
-		pDllProc->Resolve( resolver );
+		pDllProc->Resolve( resolver, resolveErrors );
 	}
 
@@ -279,5 +279,5 @@
 	{
 		CClass *pClass = this->GetClasses().Iterator_GetNext();
-		pClass->Resolve( resolver );
+		pClass->Resolve( resolver, resolveErrors );
 	}
 
@@ -285,5 +285,5 @@
 	BOOST_FOREACH( Variable *pVar, globalVars )
 	{
-		pVar->Resolve( resolver );
+		pVar->Resolve( resolver, resolveErrors );
 	}
 
@@ -294,5 +294,5 @@
 	{
 		CConst *pConst = this->GetGlobalConsts().Iterator_GetNext();
-		pConst->Resolve( resolver );
+		pConst->Resolve( resolver, resolveErrors );
 	}
 
@@ -303,5 +303,11 @@
 	{
 		ConstMacro *pConstMacro = this->GetGlobalConstMacros().Iterator_GetNext();
-		pConstMacro->Resolve( resolver );
+		pConstMacro->Resolve( resolver, resolveErrors );
+	}
+
+	// blittable型
+	BOOST_FOREACH( BlittableType &blittableType, blittableTypes )
+	{
+		blittableType.Resolve( resolver, resolveErrors );
 	}
 
@@ -309,5 +315,5 @@
 	BOOST_FOREACH( TypeDef &typeDef, typeDefs )
 	{
-		typeDef.Resolve( resolver );
+		typeDef.Resolve( resolver, resolveErrors );
 	}
 
@@ -315,5 +321,5 @@
 	BOOST_FOREACH( ProcPointer *pProcPointer, procPointers )
 	{
-		pProcPointer->Resolve( resolver );
+		pProcPointer->Resolve( resolver, resolveErrors );
 	}
 
@@ -324,5 +330,5 @@
 	{
 		Delegate *pDelegate = this->GetDelegates().Iterator_GetNext();
-		pDelegate->Resolve( resolver );
-	}
-}
+		pDelegate->Resolve( resolver, resolveErrors );
+	}
+}
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Method.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Method.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Method.cpp	(revision 640)
@@ -1,11 +1,19 @@
 #include "stdafx.h"
 
-bool CMethod::Resolve( const ObjectModule &resolver )
+bool CMethod::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	if( pUserProc )
+	if( this->pUserProc )
 	{
-		if( pUserProc->IsNeedResolve() )
+		if( this->pUserProc->IsNeedResolve() )
 		{
-			pUserProc = resolver.meta.GetUserProcs().FindLike( pUserProc );
+			const UserProc *pTempUserProc = resolver.meta.GetUserProcs().FindLike( this->pUserProc );
+			if( pTempUserProc )
+			{
+				this->pUserProc = pTempUserProc;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pUserProc->GetRelationalObjectModuleIndex(), this->pUserProc->GetFullName() ) );
+			}
 		}
 	}
@@ -41,7 +49,7 @@
 }
 
-bool DynamicMethod::Resolve( const ObjectModule &resolver )
+bool DynamicMethod::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	CMethod::Resolve( resolver );
+	CMethod::Resolve( resolver, resolveErrors );
 
 	if( this->pInheritsClass )
@@ -49,5 +57,13 @@
 		if( this->pInheritsClass->IsNeedResolve() )
 		{
-			this->pInheritsClass = resolver.meta.GetClasses().FindLike( pInheritsClass );
+			const CClass *pTempClass = resolver.meta.GetClasses().FindLike( pInheritsClass );
+			if( pTempClass )
+			{
+				this->pInheritsClass = pTempClass;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pInheritsClass->GetRelationalObjectModuleIndex(), this->pInheritsClass->GetFullName() ) );
+			}
 		}
 	}
@@ -62,7 +78,7 @@
 }
 
-bool StaticMethod::Resolve( const ObjectModule &resolver )
+bool StaticMethod::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	CMethod::Resolve( resolver );
+	CMethod::Resolve( resolver, resolveErrors );
 	return true;
 }
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp	(revision 640)
@@ -19,5 +19,5 @@
 }
 
-bool Schedule::Resolve( const ObjectModule &resolver )
+bool Schedule::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	switch( type )
@@ -26,13 +26,29 @@
 	case AddressOf:
 	case CatchAddress:
-		if( pUserProc->IsNeedResolve() )
-		{
-			pUserProc = resolver.meta.GetUserProcs().FindLike( pUserProc );
+		if( this->pUserProc->IsNeedResolve() )
+		{
+			const ::UserProc *pTempUserProc = resolver.meta.GetUserProcs().FindLike( this->pUserProc );
+			if( pTempUserProc )
+			{
+				this->pUserProc = pTempUserProc;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pUserProc->GetRelationalObjectModuleIndex(), this->pUserProc->GetFullName() ) );
+			}
 		}
 		break;
 	case DllProc:
-		if( pDllProc->IsNeedResolve() )
-		{
-			pDllProc = resolver.meta.GetDllProcs().FindLike( pDllProc );
+		if( this->pDllProc->IsNeedResolve() )
+		{
+			const ::DllProc *pTempDllProc = resolver.meta.GetDllProcs().FindLike( this->pDllProc );
+			if( pTempDllProc )
+			{
+				this->pDllProc = pTempDllProc;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pDllProc->GetRelationalObjectModuleIndex(), this->pDllProc->GetFullName() ) );
+			}
 		}
 		break;
@@ -40,7 +56,15 @@
 	case Vtbl:
 	case TypeInfo:
-		if( pClass->IsNeedResolve() )
-		{
-			pClass = resolver.meta.GetClasses().FindLike( pClass );
+		if( this->pClass->IsNeedResolve() )
+		{
+			const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pClass );
+			if( pTempClass )
+			{
+				this->pClass = pTempClass;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pClass->GetRelationalObjectModuleIndex(), this->pClass->GetFullName() ) );
+			}
 		}
 		break;
@@ -191,9 +215,9 @@
 }
 
-void NativeCode::Resolve( const ObjectModule &resolver )
+void NativeCode::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	BOOST_FOREACH( Schedule &schedule, schedules )
 	{
-		schedule.Resolve( resolver );
-	}
-}
+		schedule.Resolve( resolver, resolveErrors );
+	}
+}
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp	(revision 640)
@@ -77,7 +77,4 @@
 	}
 
-	// 依存関係を解決
-	this->Resolve();
-
 	// TODO: basbufがいらなくなったら消す
 	extern char *basbuf;
@@ -85,13 +82,13 @@
 }
 
-void ObjectModule::Resolve()
-{
-	this->meta.Resolve( *this );
+void ObjectModule::Resolve( ResolveErrors &resolveErrors )
+{
+	this->meta.Resolve( *this, resolveErrors );
 
 	// グローバルネイティブコードを解決（スケジュールを解決する）
-	this->globalNativeCode.Resolve( *this );
+	this->globalNativeCode.Resolve( *this, resolveErrors );
 
 	// データテーブルを解決（スケジュールを解決する）
-	this->dataTable.Resolve( *this );
+	this->dataTable.Resolve( *this, resolveErrors );
 }
 
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Procedure.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Procedure.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Procedure.cpp	(revision 640)
@@ -12,12 +12,12 @@
 }
 
-bool Procedure::Resolve( const ObjectModule &resolver )
+bool Procedure::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	BOOST_FOREACH( Parameter *pParameter, params )
 	{
-		pParameter->Resolve( resolver );
-	}
-
-	returnType.Resolve( resolver );
+		pParameter->Resolve( resolver, resolveErrors );
+	}
+
+	returnType.Resolve( resolver, resolveErrors );
 
 	return true;
@@ -170,13 +170,21 @@
 }
 
-bool UserProc::Resolve( const ObjectModule &resolver )
-{
-	Procedure::Resolve( resolver );
-
-	if( pParentClass )
-	{
-		if( pParentClass->IsNeedResolve() )
-		{
-			pParentClass = resolver.meta.GetClasses().FindLike( pParentClass );
+bool UserProc::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
+{
+	Procedure::Resolve( resolver, resolveErrors );
+
+	if( this->pParentClass )
+	{
+		if( this->pParentClass->IsNeedResolve() )
+		{
+			const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pParentClass );
+			if( pTempClass )
+			{
+				this->pParentClass = pTempClass;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pParentClass->GetRelationalObjectModuleIndex(), this->pParentClass->GetFullName() ) );
+			}
 		}
 	}
@@ -184,23 +192,23 @@
 	if( pInterface )
 	{
-		const_cast<Interface *>(pInterface)->Resolve( resolver );
+		const_cast<Interface *>(pInterface)->Resolve( resolver, resolveErrors );
 	}
 
 	if( pMethod )
 	{
-		pMethod->Resolve( resolver );
+		pMethod->Resolve( resolver, resolveErrors );
 	}
 
 	BOOST_FOREACH( Parameter *pParameter, realParams )
 	{
-		pParameter->Resolve( resolver );
+		pParameter->Resolve( resolver, resolveErrors );
 	}
 
 	BOOST_FOREACH( Variable *pLocalVar, localVars )
 	{
-		pLocalVar->Resolve( resolver );
-	}
-
-	nativeCode.Resolve( resolver );
+		pLocalVar->Resolve( resolver, resolveErrors );
+	}
+
+	nativeCode.Resolve( resolver, resolveErrors );
 	return true;
 }
@@ -228,13 +236,13 @@
 }
 
-bool DllProc::Resolve( const ObjectModule &resolver )
-{
-	Procedure::Resolve( resolver );
-	return true;
-}
-
-bool ProcPointer::Resolve( const ObjectModule &resolver )
-{
-	Procedure::Resolve( resolver );
+bool DllProc::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
+{
+	Procedure::Resolve( resolver, resolveErrors );
+	return true;
+}
+
+bool ProcPointer::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
+{
+	Procedure::Resolve( resolver, resolveErrors );
 	return true;
 }
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Template.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Template.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Template.cpp	(revision 640)
@@ -9,14 +9,22 @@
 }
 
-bool ExpandedTemplateClass::Resolve( const ObjectModule &resolver )
+bool ExpandedTemplateClass::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	if( pClass->IsNeedResolve() )
 	{
-		pClass = const_cast<CClass *>(resolver.meta.GetClasses().FindLike( pClass ));
+		CClass *pTempClass = const_cast<CClass *>(resolver.meta.GetClasses().FindLike( pClass ));
+		if( pTempClass )
+		{
+			this->pClass = pTempClass;
+		}
+		else
+		{
+			resolveErrors.Add( ResolveError( this->pClass->GetRelationalObjectModuleIndex(), this->pClass->GetFullName() ) );
+		}
 	}
 
 	BOOST_FOREACH( Type &actualType, actualTypes )
 	{
-		actualType.Resolve( resolver );
+		actualType.Resolve( resolver, resolveErrors );
 	}
 
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp	(revision 640)
@@ -129,14 +129,24 @@
 bool Type::Equals( const Type &type ) const
 {
-	if( basicType == type.basicType ){
-		if( NATURAL_TYPE( basicType ) == DEF_OBJECT
-			|| NATURAL_TYPE( basicType ) == DEF_STRUCT ){
-
-				if( index == type.index ){
+	if( basicType == type.basicType )
+	{
+		if( NATURAL_TYPE( basicType ) == DEF_OBJECT || NATURAL_TYPE( basicType ) == DEF_STRUCT )
+		{
+			// ポインタが等しいかどうかを見てみる
+			if( this->pClass == type.pClass )
+			{
+				return true;
+			}
+			else if( this->pClass->IsNeedResolve() || type.pClass->IsNeedResolve() )
+			{
+				// 依存関係解決前の状態であれば、パスが等しいかどうかを見てみる
+				if( this->pClass->IsDuplication( type.pClass ) )
+				{
 					return true;
 				}
-
-		}
-		else{
+			}
+		}
+		else
+		{
 			return true;
 		}
@@ -556,5 +566,5 @@
 }
 
-bool Type::Resolve( const ObjectModule &resolver )
+bool Type::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
 	if( this->HasMember() )
@@ -562,10 +572,18 @@
 		if( this->pClass->IsNeedResolve() )
 		{
-			this->pClass = resolver.meta.GetClasses().FindLike( this->pClass );
+			const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pClass );
+			if( pTempClass )
+			{
+				this->pClass = pTempClass;
+			}
+			else
+			{
+				resolveErrors.Add( ResolveError( this->pClass->GetRelationalObjectModuleIndex(), this->pClass->GetFullName() ) );
+			}
 		}
 
 		BOOST_FOREACH( GenericType &actualGenericType, actualGenericTypes )
 		{
-			actualGenericType.GetType().Resolve( resolver );
+			actualGenericType.GetType().Resolve( resolver, resolveErrors );
 		}
 	}
@@ -655,2 +673,22 @@
 	return pClass->GetNamespaceScopes().ToString() + "." + pClass->GetName() + "._Create";
 }
+
+bool BlittableType::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
+{
+	basicType.Resolve( resolver, resolveErrors );
+
+	if( this->pClass->IsNeedResolve() )
+	{
+		const CClass *pTempClass = resolver.meta.GetClasses().FindLike( this->pClass );
+		if( pTempClass )
+		{
+			this->pClass = pTempClass;
+		}
+		else
+		{
+			resolveErrors.Add( ResolveError( this->pClass->GetRelationalObjectModuleIndex(), this->pClass->GetFullName() ) );
+		}
+	}
+
+	return true;
+}
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/TypeDef.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/TypeDef.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/TypeDef.cpp	(revision 640)
@@ -8,7 +8,7 @@
 }
 
-bool TypeDef::Resolve( const ObjectModule &resolver )
+bool TypeDef::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	this->baseType.Resolve( resolver );
+	this->baseType.Resolve( resolver, resolveErrors );
 	return true;
 }
Index: /trunk/ab5.0/abdev/ab_common/src/Lexical/Variable.cpp
===================================================================
--- /trunk/ab5.0/abdev/ab_common/src/Lexical/Variable.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/ab_common/src/Lexical/Variable.cpp	(revision 640)
@@ -28,7 +28,7 @@
 }
 
-bool Variable::Resolve( const ObjectModule &resolver )
+bool Variable::Resolve( const ObjectModule &resolver, ResolveErrors &resolveErrors )
 {
-	this->type.Resolve( resolver );
+	this->type.Resolve( resolver, resolveErrors );
 	return true;
 }
Index: /trunk/ab5.0/abdev/abdev/src/MainFrame.cpp
===================================================================
--- /trunk/ab5.0/abdev/abdev/src/MainFrame.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/abdev/src/MainFrame.cpp	(revision 640)
@@ -1374,5 +1374,8 @@
 			hChild=hCompileView;
 			hCompileView=(HWND)-1;
-			SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
+			if( ::IsWindow( hChild ) )
+			{
+				SendMessage(hChild,WM_COMMAND,IDCANCEL,0);
+			}
 		}
 
Index: /trunk/ab5.0/abdev/compiler_x86/MakePeHdr.cpp
===================================================================
--- /trunk/ab5.0/abdev/compiler_x86/MakePeHdr.cpp	(revision 639)
+++ /trunk/ab5.0/abdev/compiler_x86/MakePeHdr.cpp	(revision 640)
@@ -122,4 +122,12 @@
 	compiler.PreStaticLink( compiler.staticLibraries );
 	compiler.StaticLink( compiler.staticLibraries );
+
+	// 依存関係の解決
+	ActiveBasic::Common::Lexical::ResolveErrors resolveErrors;
+	compiler.GetObjectModule().Resolve( resolveErrors );
+	BOOST_FOREACH( const ResolveError &resolveError, resolveErrors )
+	{
+		compiler.errorMessenger.Output( ErrorInfo( 13, resolveError.GetTargetItemName(), -1 ) );
+	}
 
 
