Index: trunk/abdev/BasicCompiler_Common/StrOperation.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/StrOperation.cpp	(revision 386)
+++ trunk/abdev/BasicCompiler_Common/StrOperation.cpp	(revision 387)
@@ -57,4 +57,14 @@
 	return 1;
 }
+bool RemoveStringQuotes( std::string &str )
+{
+	if( str[0] != '\"' )
+	{
+		return false;
+	}
+
+	str = str.substr( 1, str.length() - 2 );
+	return true;
+}
 void RemoveStringPare(char *str){
 	int i;
Index: trunk/abdev/BasicCompiler_Common/common.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/common.h	(revision 386)
+++ trunk/abdev/BasicCompiler_Common/common.h	(revision 387)
@@ -315,4 +315,5 @@
 void KillStringSpaces(char *str);
 BOOL RemoveStringQuotes(char *str);
+bool RemoveStringQuotes( std::string &str );
 void RemoveStringPare(char *str);
 void RemoveStringBracket(char *str);
Index: trunk/abdev/BasicCompiler_Common/include/Class.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/Class.h	(revision 386)
+++ trunk/abdev/BasicCompiler_Common/include/Class.h	(revision 387)
@@ -561,4 +561,8 @@
 	}
 
+	// 動的型データ用のメンバデータを取得
+	std::string GetStaticDefiningStringAsMemberNames() const;
+	std::string GetStaticDefiningStringAsMemberTypeInfoNames() const;
+
 
 	//線形リスト用
Index: trunk/abdev/BasicCompiler_Common/include/DataTable.h
===================================================================
--- trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 386)
+++ trunk/abdev/BasicCompiler_Common/include/DataTable.h	(revision 387)
@@ -98,4 +98,5 @@
 	int AddString( const char *str, int length );
 	int AddString( const char *str );
+	int AddString( const std::string &str );
 	void Add( const DataTable &dataTable )
 	{
@@ -116,4 +117,6 @@
 		}
 	}
+	int AddSpace( int size );
+	void AddAlignment( int size );
 
 	const void *GetPtr() const
@@ -142,4 +145,8 @@
 		*(_int64 *)( buffer + pos ) = new64Value;
 	}
+	void OverwriteBinary( int pos, const void *ptr, int size )
+	{
+		memcpy( buffer + pos, ptr, size );
+	}
 
 	bool MakeConstObjectToProcessStaticBuffer( const CClass &objClass, const Jenga::Common::Strings &initMemberValues, int &dataTableOffset );
Index: trunk/abdev/BasicCompiler_Common/src/Class.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/Class.cpp	(revision 386)
+++ trunk/abdev/BasicCompiler_Common/src/Class.cpp	(revision 387)
@@ -1151,5 +1151,5 @@
 	////////////////////////////////////////////////////////////////////
 
-	char temporary[VN_SIZE];
+	char temporary[8192];
 	sprintf(temporary, "%c%ctempType=Nothing%c%cTypeBaseImpl"
 		, HIBYTE( COM_DIM )
@@ -1175,5 +1175,5 @@
 				, "tempType=Search(\"%s\")"
 				, objClass.GetFullName().c_str()
-				);
+			);
 
 			// コンパイル
@@ -1183,37 +1183,21 @@
 				, "tempType.SetBaseType(Search(\"%s\"))"
 				, objClass.GetSuperClass().GetFullName().c_str()
-				);
+			);
 
 			// コンパイル
 			ChangeOpcode( temporary );
-		}
-	}
-
-
-
-	////////////////////////////////////////////////////////////////////
-	// 継承関係登録
-	////////////////////////////////////////////////////////////////////
-	// TODO: 未完成
-	/*
-
-	// イテレータをリセット
-	Iterator_Reset();
-
-	while( Iterator_HasNext() ){
-		CClass *pClass = Iterator_GetNext();
-
-		sprintf( genBuffer + length
-			, "obj.Search( \"%s\" ).SetBaseType( Search( \"%s\" ) ):"
-			, ""				// クラス名
-			, pClass->name		// クラス名
+
+
+			// メンバの型を示すTypeInfoオブジェクトへのDataOffset配列の静的データ定義文字列を取得
+			sprintf(
+				temporary,
+				"tempType.SetMemberTypes([%s],[%s],%d)",
+				objClass.GetStaticDefiningStringAsMemberNames().c_str(),
+				objClass.GetStaticDefiningStringAsMemberTypeInfoNames().c_str(),
+				objClass.GetDynamicMembers().size()
 			);
-		length += lstrlen( genBuffer + length );
-
-		while( length + 8192 > max ){
-			max += 8192;
-			genBuffer = (char *)realloc( genBuffer, max );
-		}
-	}*/
+			ChangeOpcode( temporary );
+		}
+	}
 }
 
@@ -1347,2 +1331,36 @@
 	return pInterfaceInfo;
 }
+
+std::string CClass::GetStaticDefiningStringAsMemberNames() const
+{
+	std::string result;
+
+	BOOST_FOREACH( const CMember *pMember, dynamicMembers )
+	{
+		if( result.size() )
+		{
+			result += ",";
+		}
+
+		result += "\"" + pMember->GetName() + "\"";
+	}
+
+	return result;
+}
+std::string CClass::GetStaticDefiningStringAsMemberTypeInfoNames() const
+{
+	std::string result;
+
+	BOOST_FOREACH( const CMember *pMember, dynamicMembers )
+	{
+		if( result.size() )
+		{
+			result += ",";
+		}
+
+		result += "\"" + compiler.TypeToString( pMember->GetType() ) + "\"";
+	}
+
+	return result;
+}
+
Index: trunk/abdev/BasicCompiler_Common/src/DataTable.cpp
===================================================================
--- trunk/abdev/BasicCompiler_Common/src/DataTable.cpp	(revision 386)
+++ trunk/abdev/BasicCompiler_Common/src/DataTable.cpp	(revision 387)
@@ -65,8 +65,26 @@
 	return retSize;
 }
-int DataTable::AddString( const char *str ){
-	int retSize = size;
-	AddString( str, lstrlen( str ) );
-	return retSize;
+int DataTable::AddString( const char *str )
+{
+	return AddString( str, lstrlen( str ) );
+}
+int DataTable::AddString( const std::string &str )
+{
+	return AddString( str.c_str(), static_cast<int>(str.length()) );
+}
+int DataTable::AddSpace( int size )
+{
+	int retSize = this->size;
+	Realloc( this->size + size );
+	return retSize;
+}
+void DataTable::AddAlignment( int size )
+{
+	if( this->size % size == 0 )
+	{
+		// 既に境界のとき
+		return;
+	}
+	Realloc( this->size + ( size - (int)(this->size%size) ) );
 }
 
@@ -262,40 +280,60 @@
 	RemoveStringBracket( buffer );
 
-	void *binary = malloc( 1 );
-	int num = 0;
-
+	Jenga::Common::Strings parameters;
+	SplitParameter( buffer, parameters );
+
+	// アラインメント
+	AddAlignment( tempBaseType.GetSize() );
+
+	// データテーブルに空間を確保
+	dataTableOffset = AddSpace( static_cast<int>(tempBaseType.GetSize() * parameters.size()) );
+
+	bool isSuccessful = true;
 	int i = 0;
-	bool isSuccessful = true;
-	while( buffer[i] ){
-		char temporary[1024];
-
-		i = GetOneParameter( buffer, i, temporary );
-		if( buffer[i] == ',' ){
-			i++;
-		}
-
-		Type resultType;
-		_int64 i64data;
-		if( !StaticCalculation( true, temporary, tempBaseType.GetBasicType(), &i64data, resultType ) ){
-			isSuccessful = false;
-			break;
-		}
-		if( !resultType.IsWhole() ){
-			// TODO: 実数に未対応
-			SetError();
-			isSuccessful = false;
-			break;
-		}
-
-		binary = realloc( binary, ( num + 1 ) * tempBaseType.GetSize() );
-		memcpy( (char *)binary + (num * tempBaseType.GetSize()), &i64data, tempBaseType.GetSize() );
-		num++;
+	BOOST_FOREACH( const std::string &paramStr, parameters )
+	{
+		if( paramStr[0] == '\"' )
+		{
+			// 文字列
+			std::string tempParamStr = paramStr;
+			if( !RemoveStringQuotes( tempParamStr ) )
+			{
+				SetError();
+			}
+
+			// 文字列を追加
+			_int64 strOffset = this->AddString( tempParamStr );
+
+			// ポインタ値を上書き
+			int tempOffset = dataTableOffset + i * tempBaseType.GetSize();
+			this->OverwriteBinary( tempOffset, &strOffset, tempBaseType.GetSize() );
+
+			// DataTableスケジュール
+			this->schedules.push_back( Schedule( Schedule::DataTable, tempOffset  ) );
+		}
+		else
+		{
+			// 数値
+			Type resultType;
+			_int64 i64data;
+			if( !StaticCalculation( true, paramStr.c_str(), tempBaseType.GetBasicType(), &i64data, resultType ) ){
+				isSuccessful = false;
+				break;
+			}
+			if( !resultType.IsWhole() ){
+				// TODO: 実数に未対応
+				SetError();
+				isSuccessful = false;
+				break;
+			}
+
+			// 上書き
+			this->OverwriteBinary( dataTableOffset + i * tempBaseType.GetSize(), &i64data, tempBaseType.GetSize() );
+		}
+
+		i++;
 	}
 
 	free( buffer );
-
-	dataTableOffset = this->AddBinary( binary, num * tempBaseType.GetSize() );
-
-	free( binary );
 
 	return isSuccessful;
