Index: trunk/abdev/BasicCompiler64/MakePeHdr.cpp
===================================================================
--- trunk/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 214)
+++ trunk/abdev/BasicCompiler64/MakePeHdr.cpp	(revision 218)
@@ -191,5 +191,4 @@
 
 
-/*
 	if( !compiler.GetMeta().WriteXml( Jenga::Common::Environment::GetAppDir() + "\\meta_test.xml" ) )
 	{
@@ -201,5 +200,5 @@
 		MessageBox(0,"XML読み込みに失敗","test",0);
 	}
-*/
+/*
 	if( !compiler.GetMeta().WriteBinaly( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
 	{
@@ -211,4 +210,13 @@
 		MessageBox(0,"バイナリ読み込みに失敗","test",0);
 	}
+	if( !compiler.GetMeta().WriteText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
+	{
+		MessageBox(0,"バイナリ書き込みに失敗","test",0);
+	}
+	MetaImpl *pTempMeta = new MetaImpl();
+	if( !pTempMeta->ReadText( Jenga::Common::Environment::GetAppDir() + "\\meta_test.dat" ) )
+	{
+		MessageBox(0,"バイナリ読み込みに失敗","test",0);
+	}*/
 	compiler.GetMeta() = (*pTempMeta);
 
@@ -523,40 +531,39 @@
 	// 使用するDLL関数のチェック
 	////////////////////////////////
-	for(i=0;i<MAX_HASH;i++){
-		extern DllProc **ppDeclareHash;
-		const DllProc *pDllProc = ppDeclareHash[i];
-		while(pDllProc){
-			if( !pDllProc->IsUsing() ){
-				pDllProc=pDllProc->pNextData;
-				continue;
+	compiler.GetMeta().GetDllProcs().Iterator_Reset();
+	while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
+	{
+		const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
+
+		if( !pDllProc->IsUsing() ){
+			pDllProc=pDllProc->pNextData;
+			continue;
+		}
+/*
+		//エラーチェック
+		HINSTANCE hLib;
+		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);
+			lstrcat(temp2,temp3);
+			lstrcpy(temp3,pDllProc->GetDllFileName().c_str());
+			GetFullPath(temp3,temp2);
+			hLib=LoadLibrary(temp3);
+
+			if(!hLib){
+				SetError(-106,pDllProc->GetDllFileName().c_str(),pDllProc->GetCodePos());
 			}
-/*
-			//エラーチェック
-			HINSTANCE hLib;
-			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);
-				lstrcat(temp2,temp3);
-				lstrcpy(temp3,pDllProc->GetDllFileName().c_str());
-				GetFullPath(temp3,temp2);
-				hLib=LoadLibrary(temp3);
-
-				if(!hLib){
-					SetError(-106,pDllProc->GetDllFileName().c_str(),pDllProc->GetCodePos());
-				}
+		}
+
+		if(hLib){
+			if(!GetProcAddress(hLib,pDllProc->GetAlias().c_str())){
+				FreeLibrary(hLib);
+				SetError(-107,pDllProc->GetAlias(),pDllProc->GetCodePos());
 			}
-
-			if(hLib){
-				if(!GetProcAddress(hLib,pDllProc->GetAlias().c_str())){
-					FreeLibrary(hLib);
-					SetError(-107,pDllProc->GetAlias(),pDllProc->GetCodePos());
-				}
-				FreeLibrary(hLib);
-			}
+			FreeLibrary(hLib);
+		}
 */
-			pDllProc=pDllProc->pNextData;
-		}
 	}
 
@@ -669,8 +676,4 @@
 	//インポートDLL情報
 	/////////////////////
-	extern DllProc **ppDeclareHash;
-	DllProc *pDllProc;
-	char **ppDllNames;
-	int ImportDllNum;
 
 	/*
@@ -702,32 +705,32 @@
 	*/
 
-	ppDllNames=(char **)HeapAlloc(hHeap,0,1);
-
-	ImportDllNum=0;
-	for(i=0;i<MAX_HASH;i++){
-		const DllProc *pDllProc=ppDeclareHash[i];
-		while(pDllProc){
-			if( !pDllProc->IsUsing() ){
-				pDllProc=pDllProc->pNextData;
-				continue;
-			}
-
-			if( pDllProc->GetDllFileName().size() > 16 ){
-				SetError(7,NULL,cp);
+	char **ppDllNames=(char **)HeapAlloc(hHeap,0,1);
+
+	int ImportDllNum=0;
+
+	compiler.GetMeta().GetDllProcs().Iterator_Reset();
+	while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
+	{
+		const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
+
+		if( !pDllProc->IsUsing() ){
+			pDllProc=pDllProc->pNextData;
+			continue;
+		}
+
+		if( pDllProc->GetDllFileName().size() > 16 ){
+			SetError(7,NULL,cp);
+			break;
+		}
+		for(i2=0;i2<ImportDllNum;i2++){
+			if( pDllProc->GetDllFileName() == ppDllNames[i2] ){
 				break;
 			}
-			for(i2=0;i2<ImportDllNum;i2++){
-				if( pDllProc->GetDllFileName() == ppDllNames[i2] ){
-					break;
-				}
-			}
-			if(i2==ImportDllNum){
-				ppDllNames=(char **)HeapReAlloc(hHeap,0,ppDllNames,(ImportDllNum+1)*sizeof(char **));
-				ppDllNames[ImportDllNum]=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,16);
-				lstrcpy(ppDllNames[ImportDllNum],pDllProc->GetDllFileName().c_str());
-				ImportDllNum++;
-			}
-
-			pDllProc=pDllProc->pNextData;
+		}
+		if(i2==ImportDllNum){
+			ppDllNames=(char **)HeapReAlloc(hHeap,0,ppDllNames,(ImportDllNum+1)*sizeof(char **));
+			ppDllNames[ImportDllNum]=(char *)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,16);
+			lstrcpy(ppDllNames[ImportDllNum],pDllProc->GetDllFileName().c_str());
+			ImportDllNum++;
 		}
 	}
@@ -744,18 +747,18 @@
 		pImportDescriptor[i].ForwarderChain=0;
 		pImportDescriptor[i].Name=i*0x10;	//※すぐ下で再計算
-		for(i2=0;i2<MAX_HASH;i2++){
-			pDllProc=ppDeclareHash[i2];
-			while(pDllProc){
-				if( !pDllProc->IsUsing() ){
-					pDllProc=pDllProc->pNextData;
-					continue;
-				}
-
-				if( pDllProc->GetDllFileName() == ppDllNames[i] ){
-					//ルックアップデータのサイズを追加
-					LookupSize+=sizeof(_int64);
-				}
-
+
+		compiler.GetMeta().GetDllProcs().Iterator_Reset();
+		while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
+		{
+			const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
+
+			if( !pDllProc->IsUsing() ){
 				pDllProc=pDllProc->pNextData;
+				continue;
+			}
+
+			if( pDllProc->GetDllFileName() == ppDllNames[i] ){
+				//ルックアップデータのサイズを追加
+				LookupSize+=sizeof(_int64);
 			}
 		}
@@ -783,39 +786,38 @@
 	pHintTable=(char *)HeapAlloc(hHeap,0,HintAllocSize);
 	for(i=0,i5=0;i<ImportDllNum;i++){
-		for(i2=0;i2<MAX_HASH;i2++){
-			pDllProc=ppDeclareHash[i2];
-			while(pDllProc){
-				if( !pDllProc->IsUsing() ){
-					pDllProc=pDllProc->pNextData;
-					continue;
+		compiler.GetMeta().GetDllProcs().Iterator_Reset();
+		while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
+		{
+			DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
+
+			if( !pDllProc->IsUsing() ){
+				pDllProc=pDllProc->pNextData;
+				continue;
+			}
+
+			if( pDllProc->GetDllFileName() == ppDllNames[i] ){
+				//ルックアップの位置をセット（後にインポート アドレス テーブルにセットしなおされる）
+				pDllProc->SetLookupAddress( i5*sizeof(_int64) );
+
+				//ルックアップ テーブルの値をセット
+				pLookupTable[i5++]=
+					LookupSize+			//インポート アドレス テーブル
+					LookupSize+			//ルックアップテーブル
+					(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+	//IMAGE_IMPORT_DESCRIPTOR
+					ImportDllNum*0x10+	//DLL名の羅列
+					HintSize;			//ヒント名へのオフセット
+
+				//ヒント テーブル
+				pHintTable[HintSize++]=0;
+				pHintTable[HintSize++]=0;
+				lstrcpy(pHintTable+HintSize,pDllProc->GetAlias().c_str());
+				i4=(int)pDllProc->GetAlias().size();
+				HintSize+=i4+1;
+				if(i4%2==0) pHintTable[HintSize++]=0;
+
+				if(HintAllocSize<HintSize+128){
+					HintAllocSize+=128;
+					pHintTable=(char *)HeapReAlloc(hHeap,0,pHintTable,HintAllocSize);
 				}
-
-				if( pDllProc->GetDllFileName() == ppDllNames[i] ){
-					//ルックアップの位置をセット（後にインポート アドレス テーブルにセットしなおされる）
-					pDllProc->SetLookupAddress( i5*sizeof(_int64) );
-
-					//ルックアップ テーブルの値をセット
-					pLookupTable[i5++]=
-						LookupSize+			//インポート アドレス テーブル
-						LookupSize+			//ルックアップテーブル
-						(ImportDllNum+1)*sizeof(IMAGE_IMPORT_DESCRIPTOR)+	//IMAGE_IMPORT_DESCRIPTOR
-						ImportDllNum*0x10+	//DLL名の羅列
-						HintSize;			//ヒント名へのオフセット
-
-					//ヒント テーブル
-					pHintTable[HintSize++]=0;
-					pHintTable[HintSize++]=0;
-					lstrcpy(pHintTable+HintSize,pDllProc->GetAlias().c_str());
-					i4=(int)pDllProc->GetAlias().size();
-					HintSize+=i4+1;
-					if(i4%2==0) pHintTable[HintSize++]=0;
-
-					if(HintAllocSize<HintSize+128){
-						HintAllocSize+=128;
-						pHintTable=(char *)HeapReAlloc(hHeap,0,pHintTable,HintAllocSize);
-					}
-				}
-
-				pDllProc=pDllProc->pNextData;
 			}
 		}
@@ -1088,18 +1090,17 @@
 			LookupSize;			//ルックアップテーブル
 
-		for(i2=0;i2<MAX_HASH;i2++){
-			const DllProc *pDllProc=ppDeclareHash[i2];
-			while(pDllProc){
-				if( !pDllProc->IsUsing() ){
-					pDllProc=pDllProc->pNextData;
-					continue;
-				}
-
-				if( pDllProc->GetDllFileName() == ppDllNames[i] ){
-					//ルックアップ テーブル
-					pLookupTable[i5++]+=MemPos_ImportSection;
-				}
-
+		compiler.GetMeta().GetDllProcs().Iterator_Reset();
+		while( compiler.GetMeta().GetDllProcs().Iterator_HasNext() )
+		{
+			const DllProc *pDllProc = compiler.GetMeta().GetDllProcs().Iterator_GetNext();
+
+			if( !pDllProc->IsUsing() ){
 				pDllProc=pDllProc->pNextData;
+				continue;
+			}
+
+			if( pDllProc->GetDllFileName() == ppDllNames[i] ){
+				//ルックアップ テーブル
+				pLookupTable[i5++]+=MemPos_ImportSection;
 			}
 		}
