//从文件中读取变量 VOID CVariableSystem::LoadVariable(LPCTSTR szFileName, VARIABLE_MAP& mapBuf) { KLAssert(szFileName); // mapBuf.clear(); //----------------------------------------------------------- //取得配置文件的大小 HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(INVALID_HANDLE_VALUE == hFile) return; DWORD dwHigh; DWORD dwFileSize = GetFileSize(hFile, &dwHigh); CloseHandle(hFile); hFile = NULL; if(0==dwFileSize) return; //----------------------------------------------------------- //分配足够的内存 CHAR* pTempBuf = new CHAR[dwFileSize+32]; if(!pTempBuf) return; //----------------------------------------------------------- //从配置文件中读取"Variable"节 ::GetPrivateProfileSection("Variable", pTempBuf, dwFileSize, szFileName); //分解 std::vector< STRING > vRet; ConvertSectionInVector(pTempBuf, dwFileSize, vRet); delete[] pTempBuf; pTempBuf=NULL; //加入变量定义 for(INT i=0; i<(INT)vRet.size(); i++) { STRING& strLine = vRet[i]; STRING::size_type tEqu = strLine.find_first_of("= \t"); if(tEqu == STRING::npos) continue; STRING strName = strLine.substr(0, tEqu); CHAR szTemp[1024]; ::GetPrivateProfileString("Variable", strName.c_str(), "", szTemp, 1024, szFileName); SetVariable(strName.c_str(), szTemp, FALSE); } }
//从文件中读取变量 VOID CVariableSystem::LoadVariable(LPCTSTR szFileName, VARIABLE_MAP& mapBuf) { TDAssert(szFileName); mapBuf.clear(); //----------------------------------------------------------- //取得配置文件的大小 HANDLE hFile = CreateFile(szFileName, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(INVALID_HANDLE_VALUE == hFile) return; DWORD dwHigh; DWORD dwFileSize = GetFileSize(hFile, &dwHigh); CloseHandle(hFile); hFile = NULL; if(0==dwFileSize) return; //----------------------------------------------------------- //分配足够的内存 CHAR* pTempBuf = new CHAR[dwFileSize+32]; if(!pTempBuf) return; //----------------------------------------------------------- //从配置文件中读取"Variable"节 ::GetPrivateProfileSection("Variable", pTempBuf, dwFileSize, szFileName); //分解 std::vector< STRING > vRet; ConvertSectionInVector(pTempBuf, dwFileSize, vRet); delete[] pTempBuf; pTempBuf=NULL; //加入变量定义 for(INT i=0; i<(INT)vRet.size(); i++) { STRING& strLine = vRet[i]; STRING::size_type tEqu = strLine.find_first_of("= \t"); if(tEqu == STRING::npos) continue; STRING strName = strLine.substr(0, tEqu); CHAR szTemp[1024]; ::GetPrivateProfileString("Variable", strName.c_str(), "", szTemp, 1024, szFileName); SetVariable(strName.c_str(), szTemp, FALSE); } //----------------------------------------------------------- //导出函数 m_pMetaTable = new LuaPlus::LuaObject; *m_pMetaTable = CScriptSystem::GetMe()->GetLuaState()->GetGlobals().CreateTable("Variable"); m_pMetaTable->SetObject("__index", *m_pMetaTable); m_pMetaTable->RegisterObjectFunctor("GetVariable", &CVariableSystem::Lua_GetGlobalVariable); m_pMetaTable->RegisterObjectFunctor("SetVariable", &CVariableSystem::Lua_SetGlobalVariable); m_pMetaTable->RegisterObjectFunctor("SetVariableDelay", &CVariableSystem::Lua_SetGlobalVariableDelay); LuaObject obj_Variable = CScriptSystem::GetMe()->GetLuaState()->BoxPointer(this); obj_Variable.SetMetaTable(*m_pMetaTable); CScriptSystem::GetMe()->GetLuaState()->GetGlobals().SetObject("Variable", obj_Variable); }