ModuleInterface *ModuleManager::LoadModule(const wxString & path) { wxDynamicLibrary *lib = new wxDynamicLibrary(); if (lib->Load(path, wxDL_NOW)) { bool success = false; ModuleMain audacityMain = (ModuleMain) lib->GetSymbol(wxSTRINGIZE_T(MODULE_ENTRY), &success); if (success && audacityMain) { ModuleInterface *module = audacityMain(this, &path); if (module) { if (module->Initialize()) { mDynModules[PluginManager::GetID(module)] = module; mLibs[module] = lib; return module; } module->Terminate(); delete module; } } lib->Unload(); } delete lib; return NULL; }
void ModuleManager::InitializeBuiltins() { PluginManager & pm = PluginManager::Get(); for (size_t i = 0, cnt = pBuiltinModuleList->GetCount(); i < cnt; i++) { ModuleInterface *module = ((ModuleMain) (*pBuiltinModuleList)[i])(this, NULL); if (module->Initialize()) { // Register the provider const PluginID & id = pm.RegisterPlugin(module); // Need to remember it mDynModules[id] = module; // Allow the module to auto-register children module->AutoRegisterPlugins(pm); } } }