Method::Method(IMAGE_COR_ILMETHOD* pMethod) { memset(&m_header, 0, 3 * sizeof(DWORD)); m_header.Size = 3; m_header.Flags = CorILMethod_FatFormat; m_header.MaxStack = 8; ReadMethod(pMethod); }
SEntityDef* CDefParser::ParseDef(const char* pszDefFn) { TiXmlDocument doc; if(!doc.LoadFile(pszDefFn)) { ThrowException(-1, "Failed to parse def file: %s.", pszDefFn); } TiXmlElement* root = doc.RootElement(); SEntityDef* pDef = new SEntityDef; pDef->m_bHasCellClient = false; //parent TiXmlElement* parent = root->FirstChildElement("parent"); if(parent) { pDef->m_parent.assign(parent->GetText()); } else { pDef->m_parent = ""; } //Properties TiXmlElement* props = root->FirstChildElement("Properties"); if(props) { TiXmlElement* field = props->FirstChildElement(); for(; field != NULL; field = field->NextSiblingElement()) { _SEntityDefProperties* pProp = ReadProperty(pDef, field); //todo,检查有无重复的字段名 pDef->m_properties.insert(make_pair(pProp->m_name, pProp)); pDef->m_propertiesList.push_back(pProp); pDef->m_propertiesMap.AddNewString(field->Value()); } } //ClientMethods TiXmlElement* methods = root->FirstChildElement("ClientMethods"); if(methods) { TiXmlElement* m = methods->FirstChildElement(); for(; m != NULL; m = m->NextSiblingElement()) { _SEntityDefMethods* p = ReadMethod(m); p->m_nServerId = SERVER_CLIENT; pDef->m_clientMethods.insert(make_pair(p->m_funcName, p)); pDef->m_clientMethodsMap.AddNewString(p->m_funcName); } } //BaseMethods methods = root->FirstChildElement("BaseMethods"); if(methods) { TiXmlElement* m = methods->FirstChildElement(); for(; m != NULL; m = m->NextSiblingElement()) { _SEntityDefMethods* p = ReadMethod(m); p->m_nServerId = SERVER_BASEAPP; pDef->m_baseMethods.insert(make_pair(p->m_funcName, p)); pDef->m_baseMethodsMap.AddNewString(p->m_funcName); } } //CellMethods methods = root->FirstChildElement("CellMethods"); if(methods) { TiXmlElement* m = methods->FirstChildElement(); for(; m != NULL; m = m->NextSiblingElement()) { _SEntityDefMethods* p = ReadMethod(m); p->m_nServerId = SERVER_CELLAPP; pDef->m_cellMethods.insert(make_pair(p->m_funcName, p)); pDef->m_cellMethodsMap.AddNewString(p->m_funcName); } } return pDef; }