void MainWindow::loadModules() { const QString appDirPath = QApplication::applicationDirPath(); const QDir dir(appDirPath + "/modules"); const QDir sharedDir(appDirPath + "/shared"); const auto modules = dir.entryList(QDir::Dirs, QDir::Name); auto& factory = DocumentFactory::instance(); // Just to make sure it is created here and now #ifdef WIN32 SetDefaultDllDirectories(LOAD_LIBRARY_SEARCH_DEFAULT_DIRS); QString sharedDirPath = sharedDir.absolutePath(); auto sharedDllDir = AddDllDirectory(sharedDirPath.toStdWString().c_str()); #endif for (const auto& module : modules) { if (module.startsWith(".")) continue; QDir moduleDir = dir; moduleDir.cd(module); QString dirPath = moduleDir.absolutePath(); factory.setModuleDirPath(dirPath.toStdString()); #ifdef WIN32 auto moduleDllDir = AddDllDirectory(dirPath.toStdWString().c_str()); #endif QFileInfo file(moduleDir, module); QString path = file.absoluteFilePath(); QLibrary lib(path); lib.load(); #ifdef WIN32 RemoveDllDirectory(moduleDllDir); #endif } #ifdef WIN32 RemoveDllDirectory(sharedDllDir); #endif }
void pluginShutdown() { OpenAL::free(); Log::setSink( NULL ); RemoveDllDirectory( dllSearchCookie ); }