void Application::Initialize() { BOOST_ASSERT( m_IsInitialized == false ); Super::Initialize(); // Initialize loaded plug-ins PluginList::iterator pluginIter = m_Plugins.begin(); while ( pluginIter != m_Plugins.end() ) { PluginPtr plugin = (*pluginIter); plugin->Initialize(); ++pluginIter; } // Initialize registered subsystems SubsystemList::iterator subsystemIter = m_Subsystems.begin(); while ( subsystemIter != m_Subsystems.end() ) { SubsystemPtr subsystem = (*subsystemIter); subsystem->Initialize(); ++subsystemIter; } m_IsInitialized = true; OnInitialized( EventArgs( *this ) ); }
PluginPtr Application::LoadPlugin( const std::wstring& filename ) { fs::wpath filePath( filename ); fs::wpath pluginName = filePath.stem(); PluginPtr pluginPtr = GetPluginByName( pluginName.wstring() ); if ( !pluginPtr ) { // Try to load the dynamic lib from the provided filename. DynamicLibPtr pluginLib = m_DynamicLibSubsystem->Load( filename ); if ( pluginLib ) { CreatePluginFP createPluginFunc = (CreatePluginFP)pluginLib->GetSymbol( "CreatePlugin" ); if ( createPluginFunc != NULL ) { pluginPtr = createPluginFunc(); if ( pluginPtr != NULL ) { pluginPtr->FileName = filePath.wstring(); pluginPtr->PluginName = filePath.stem().wstring(); if ( m_IsInitialized ) { pluginPtr->Initialize(); } AddPlugin( pluginPtr ); } else { std::cerr << "Application::LoadPlugin: Plug-in creation failed in library \""; std::wcerr << filename; std::wcerr << "\"" << std::endl; } } else { std::cerr << "Application::LoadPlugin: Could not find symbol \"CreatePlugin\" in library \""; std::wcerr << filename; std::cerr << "\"" << std::endl; } } } return pluginPtr; }