Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Class.cpp	(revision 639)
@@ -869,7 +869,66 @@
 }
 
-bool CClass::Resolve()
-{
-	// TODO: Resolve
+bool CClass::Resolve( const ObjectModule &resolver )
+{
+	// 型パラメータ
+	BOOST_FOREACH( GenericType &genericType, formalGenericTypes )
+	{
+		genericType.GetType().Resolve( resolver );
+	}
+
+	// 基底クラス
+	if( this->pSuperClass )
+	{
+		if( this->pSuperClass->IsNeedResolve() )
+		{
+			this->pSuperClass = resolver.meta.GetClasses().FindEx( *pSuperClass );
+		}
+	}
+
+	// 基底クラスの型パラメータ（実パラメータ）
+	BOOST_FOREACH( Type &superClassActualTypeParameter, superClassActualTypeParameters )
+	{
+		superClassActualTypeParameter.Resolve( resolver );
+	}
+
+	// Blittable型情報
+	blittableType.Resolve( resolver );
+
+	// 実装するインターフェイス
+	BOOST_FOREACH( ::Interface *pInterface, interfaces )
+	{
+		pInterface->Resolve( resolver );
+	}
+
+	// 動的メンバ
+	BOOST_FOREACH( Member *pMember, dynamicMembers )
+	{
+		pMember->Resolve( resolver );
+	}
+
+	// 静的メンバ
+	BOOST_FOREACH( Member *pMember, staticMembers )
+	{
+		pMember->Resolve( resolver );
+	}
+
+	// 動的メソッド
+	BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() )
+	{
+		pMethod->Resolve( resolver );
+	}
+
+	// 静的メソッド
+	BOOST_FOREACH( CMethod *pMethod, staticMethods )
+	{
+		pMethod->Resolve( resolver );
+	}
+
+	// テンプレート展開後のクラス
+	BOOST_FOREACH( ActiveBasic::Common::Lexical::ExpandedTemplateClass *pExpandedTemplateClass, expandedTemplateClasses )
+	{
+		pExpandedTemplateClass->Resolve( resolver );
+	}
+
 	return true;
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Const.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Const.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Const.cpp	(revision 639)
@@ -7,7 +7,7 @@
 }
 
-bool CConst::Resolve()
+bool CConst::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	type.Resolve( resolver );
 	return true;
 }
@@ -78,7 +78,7 @@
 }
 
-bool ConstMacro::Resolve()
+bool ConstMacro::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	// 依存関係を解決すべきメンバは無い
 	return true;
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/DataTable.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/DataTable.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/DataTable.cpp	(revision 639)
@@ -78,6 +78,9 @@
 }
 
-void DataTable::Resolve()
+void DataTable::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	BOOST_FOREACH( Schedule &schedule, schedules )
+	{
+		schedule.Resolve( resolver );
+	}
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Delegate.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Delegate.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Delegate.cpp	(revision 639)
@@ -19,7 +19,13 @@
 }
 
-bool Delegate::Resolve()
+bool Delegate::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	Procedure::Resolve( resolver );
+
+	BOOST_FOREACH( Parameter *pParameter, dynamicParams )
+	{
+		pParameter->Resolve( resolver );
+	}
+
 	return true;
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Interface.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Interface.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Interface.cpp	(revision 639)
@@ -52,2 +52,27 @@
 	return interfaceName;
 }
+
+bool Interface::Resolve( const ObjectModule &resolver )
+{
+	// 動的メソッド
+	BOOST_FOREACH( CMethod *pMethod, GetDynamicMethods() )
+	{
+		pMethod->Resolve( resolver );
+	}
+
+	// クラス
+	if( this->pInterfaceClass )
+	{
+		if( this->pInterfaceClass->IsNeedResolve() )
+		{
+			this->pInterfaceClass = resolver.meta.GetClasses().FindLike( pInterfaceClass );
+		}
+	}
+
+	BOOST_FOREACH( Type &actualTypeParameter, actualTypeParameters )
+	{
+		actualTypeParameter.Resolve( resolver );
+	}
+
+	return true;
+}
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Member.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Member.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Member.cpp	(revision 639)
@@ -40,2 +40,8 @@
 {
 }
+
+bool Member::Resolve( const ObjectModule &resolver )
+{
+	type.Resolve( resolver );
+	return true;
+}
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Meta.cpp	(revision 639)
@@ -253,5 +253,5 @@
 }
 
-void Meta::Resolve()
+void Meta::Resolve( const ObjectModule &resolver )
 {
 	// 関数・メソッド
@@ -261,5 +261,5 @@
 	{
 		UserProc *pUserProc = this->GetUserProcs().Iterator_GetNext();
-		pUserProc->Resolve();
+		pUserProc->Resolve( resolver );
 	}
 
@@ -270,5 +270,5 @@
 	{
 		DllProc *pDllProc = this->GetDllProcs().Iterator_GetNext();
-		pDllProc->Resolve();
+		pDllProc->Resolve( resolver );
 	}
 
@@ -279,5 +279,5 @@
 	{
 		CClass *pClass = this->GetClasses().Iterator_GetNext();
-		pClass->Resolve();
+		pClass->Resolve( resolver );
 	}
 
@@ -285,5 +285,5 @@
 	BOOST_FOREACH( Variable *pVar, globalVars )
 	{
-		pVar->Resolve();
+		pVar->Resolve( resolver );
 	}
 
@@ -294,5 +294,5 @@
 	{
 		CConst *pConst = this->GetGlobalConsts().Iterator_GetNext();
-		pConst->Resolve();
+		pConst->Resolve( resolver );
 	}
 
@@ -303,5 +303,5 @@
 	{
 		ConstMacro *pConstMacro = this->GetGlobalConstMacros().Iterator_GetNext();
-		pConstMacro->Resolve();
+		pConstMacro->Resolve( resolver );
 	}
 
@@ -309,5 +309,5 @@
 	BOOST_FOREACH( TypeDef &typeDef, typeDefs )
 	{
-		typeDef.Resolve();
+		typeDef.Resolve( resolver );
 	}
 
@@ -315,5 +315,5 @@
 	BOOST_FOREACH( ProcPointer *pProcPointer, procPointers )
 	{
-		pProcPointer->Resolve();
+		pProcPointer->Resolve( resolver );
 	}
 
@@ -324,5 +324,5 @@
 	{
 		Delegate *pDelegate = this->GetDelegates().Iterator_GetNext();
-		pDelegate->Resolve();
-	}
-}
+		pDelegate->Resolve( resolver );
+	}
+}
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Method.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Method.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Method.cpp	(revision 639)
@@ -1,3 +1,15 @@
 #include "stdafx.h"
+
+bool CMethod::Resolve( const ObjectModule &resolver )
+{
+	if( pUserProc )
+	{
+		if( pUserProc->IsNeedResolve() )
+		{
+			pUserProc = resolver.meta.GetUserProcs().FindLike( pUserProc );
+		}
+	}
+	return true;
+}
 
 DynamicMethod::OverrideResult::EnumType DynamicMethod::Override( const UserProc *pUserProc, Prototype::Accessibility accessibility, bool isOverrideModifier )
@@ -29,4 +41,18 @@
 }
 
+bool DynamicMethod::Resolve( const ObjectModule &resolver )
+{
+	CMethod::Resolve( resolver );
+
+	if( this->pInheritsClass )
+	{
+		if( this->pInheritsClass->IsNeedResolve() )
+		{
+			this->pInheritsClass = resolver.meta.GetClasses().FindLike( pInheritsClass );
+		}
+	}
+
+	return true;
+}
 
 StaticMethod::StaticMethod( const StaticMethod &staticMethod )
@@ -35,4 +61,11 @@
 	throw;
 }
+
+bool StaticMethod::Resolve( const ObjectModule &resolver )
+{
+	CMethod::Resolve( resolver );
+	return true;
+}
+
 
 Methods::Methods()
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/NativeCode.cpp	(revision 639)
@@ -17,4 +17,37 @@
 	_ASSERT( type == Schedule::ComVtbl || type == Schedule::Vtbl || type == Schedule::TypeInfo );
 	return *pClass;
+}
+
+bool Schedule::Resolve( const ObjectModule &resolver )
+{
+	switch( type )
+	{
+	case UserProc:
+	case AddressOf:
+	case CatchAddress:
+		if( pUserProc->IsNeedResolve() )
+		{
+			pUserProc = resolver.meta.GetUserProcs().FindLike( pUserProc );
+		}
+		break;
+	case DllProc:
+		if( pDllProc->IsNeedResolve() )
+		{
+			pDllProc = resolver.meta.GetDllProcs().FindLike( pDllProc );
+		}
+		break;
+	case ComVtbl:
+	case Vtbl:
+	case TypeInfo:
+		if( pClass->IsNeedResolve() )
+		{
+			pClass = resolver.meta.GetClasses().FindLike( pClass );
+		}
+		break;
+	default:
+		break;
+	}
+
+	return true;
 }
 
@@ -158,6 +191,9 @@
 }
 
-void NativeCode::Resolve()
+void NativeCode::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	BOOST_FOREACH( Schedule &schedule, schedules )
+	{
+		schedule.Resolve( resolver );
+	}
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/ObjectModule.cpp	(revision 639)
@@ -87,11 +87,11 @@
 void ObjectModule::Resolve()
 {
-	this->meta.Resolve();
+	this->meta.Resolve( *this );
 
 	// グローバルネイティブコードを解決（スケジュールを解決する）
-	this->globalNativeCode.Resolve();
+	this->globalNativeCode.Resolve( *this );
 
 	// データテーブルを解決（スケジュールを解決する）
-	this->dataTable.Resolve();
+	this->dataTable.Resolve( *this );
 }
 
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Procedure.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Procedure.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Procedure.cpp	(revision 639)
@@ -11,4 +11,17 @@
 	}
 }
+
+bool Procedure::Resolve( const ObjectModule &resolver )
+{
+	BOOST_FOREACH( Parameter *pParameter, params )
+	{
+		pParameter->Resolve( resolver );
+	}
+
+	returnType.Resolve( resolver );
+
+	return true;
+}
+
 
 void UserProc::ResetRelationalObjectModuleIndex( const std::vector<int> &relationTable )
@@ -157,7 +170,37 @@
 }
 
-bool UserProc::Resolve()
-{
-	// TODO: Resolve
+bool UserProc::Resolve( const ObjectModule &resolver )
+{
+	Procedure::Resolve( resolver );
+
+	if( pParentClass )
+	{
+		if( pParentClass->IsNeedResolve() )
+		{
+			pParentClass = resolver.meta.GetClasses().FindLike( pParentClass );
+		}
+	}
+
+	if( pInterface )
+	{
+		const_cast<Interface *>(pInterface)->Resolve( resolver );
+	}
+
+	if( pMethod )
+	{
+		pMethod->Resolve( resolver );
+	}
+
+	BOOST_FOREACH( Parameter *pParameter, realParams )
+	{
+		pParameter->Resolve( resolver );
+	}
+
+	BOOST_FOREACH( Variable *pLocalVar, localVars )
+	{
+		pLocalVar->Resolve( resolver );
+	}
+
+	nativeCode.Resolve( resolver );
 	return true;
 }
@@ -185,13 +228,13 @@
 }
 
-bool DllProc::Resolve()
-{
-	// TODO: Resolve
-	return true;
-}
-
-bool ProcPointer::Resolve()
-{
-	// TODO: Resolve
+bool DllProc::Resolve( const ObjectModule &resolver )
+{
+	Procedure::Resolve( resolver );
+	return true;
+}
+
+bool ProcPointer::Resolve( const ObjectModule &resolver )
+{
+	Procedure::Resolve( resolver );
 	return true;
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Template.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Template.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Template.cpp	(revision 639)
@@ -8,2 +8,17 @@
 	}
 }
+
+bool ExpandedTemplateClass::Resolve( const ObjectModule &resolver )
+{
+	if( pClass->IsNeedResolve() )
+	{
+		pClass = const_cast<CClass *>(resolver.meta.GetClasses().FindLike( pClass ));
+	}
+
+	BOOST_FOREACH( Type &actualType, actualTypes )
+	{
+		actualType.Resolve( resolver );
+	}
+
+	return true;
+}
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Type.cpp	(revision 639)
@@ -554,4 +554,21 @@
 	if(name[i]=='%') return DEF_INTEGER;
 	return DEF_DOUBLE;
+}
+
+bool Type::Resolve( const ObjectModule &resolver )
+{
+	if( this->HasMember() )
+	{
+		if( this->pClass->IsNeedResolve() )
+		{
+			this->pClass = resolver.meta.GetClasses().FindLike( this->pClass );
+		}
+
+		BOOST_FOREACH( GenericType &actualGenericType, actualGenericTypes )
+		{
+			actualGenericType.GetType().Resolve( resolver );
+		}
+	}
+	return true;
 }
 
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/TypeDef.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/TypeDef.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/TypeDef.cpp	(revision 639)
@@ -8,7 +8,7 @@
 }
 
-bool TypeDef::Resolve()
+bool TypeDef::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	this->baseType.Resolve( resolver );
 	return true;
 }
Index: trunk/ab5.0/abdev/ab_common/src/Lexical/Variable.cpp
===================================================================
--- trunk/ab5.0/abdev/ab_common/src/Lexical/Variable.cpp	(revision 637)
+++ trunk/ab5.0/abdev/ab_common/src/Lexical/Variable.cpp	(revision 639)
@@ -28,7 +28,7 @@
 }
 
-bool Variable::Resolve()
+bool Variable::Resolve( const ObjectModule &resolver )
 {
-	// TODO: Resolve
+	this->type.Resolve( resolver );
 	return true;
 }
