8 #include "IPluginManager.h"
9 #include "IAudioPlugin.h"
10 #include "cSTLAllocator.h"
11 #include "cAudioString.h"
13 #ifdef CAUDIO_COMPILE_WITH_PLUGIN_SUPPORT
15 #ifdef CAUDIO_PLATFORM_WIN
18 typedef struct HINSTANCE__* hInstance;
20 # define DYNLIB_HANDLE hInstance
21 # define DYNLIB_LOAD( a ) LoadLibraryEx( a, NULL, LOAD_WITH_ALTERED_SEARCH_PATH )
22 # define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
23 # define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
24 #elif defined(CAUDIO_PLATFORM_MAC) || defined(CAUDIO_PLATFORM_LINUX)
26 # define DYNLIB_HANDLE void*
27 # define DYNLIB_LOAD( a ) dlopen( a, RTLD_LAZY | RTLD_GLOBAL)
28 # define DYNLIB_GETSYM( a, b ) dlsym( a, b )
29 # define DYNLIB_UNLOAD( a ) dlclose( a )
34 class cPluginManager :
public IPluginManager
40 static cPluginManager* Instance()
42 static cPluginManager theInstance;
46 virtual bool installPlugin(IAudioPlugin* plugin,
const char* name);
47 virtual bool installPlugin(
const char* filename,
const char* name);
49 virtual bool checkForPlugin(
const char* name);
50 virtual IAudioPlugin* getPlugin(
const char* name);
51 virtual unsigned int getPluginCount();
52 cAudioVector<IAudioPlugin*>::Type getPluginList();
54 virtual void uninstallPlugin(IAudioPlugin* plugin);
55 virtual void uninstallPlugin(
const char* name);
57 void autoLoadPlugins();
59 cAudioString getError();
61 cAudioMap<cAudioString, IAudioPlugin*>::Type RegisteredPlugins;
62 typedef cAudioMap<cAudioString, IAudioPlugin*>::Type::iterator RegisteredPluginsIterator;
63 cAudioMap<IAudioPlugin*, DYNLIB_HANDLE>::Type DynamicallyLoadedPlugins;
64 typedef cAudioMap<IAudioPlugin*, DYNLIB_HANDLE>::Type::iterator DynamicallyLoadedPluginsIterator;
68 #endif //! CAUDIO_COMPILE_WITH_PLUGIN_SUPPORT