Example #1
0
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
}
Example #2
0
void pluginShutdown()
{
	OpenAL::free();
	Log::setSink( NULL );
	RemoveDllDirectory( dllSearchCookie );
}