#ifndef __PLUGIN__DYNAMICMGR_H_
#define __PLUGIN__DYNAMICMGR_H_
class DynamicMgr
{
public:
~DynamicMgr(){free_lib();}
/** */
const char* get_name()const;
/** */
bool load_lib(const char* libName);
/** */
void* get_address(const char* symbolMane)const;
private:
void free_lib();
std::string __m_libName;
#if defined(__unix__) || defined(unix) || defined(linux)
void* __m_lib;
#else
HMODULE __m_lib;
#endif
};
#endif
const char* DynamicMgr::get_name()const
{
return __m_libName.c_str();
}
/*************************************************************
* Unix System
**************************************************************/
#if defined(__unix__) || defined(unix) || defined(linux)
#include <dlfcn.h>
bool DynamicMgr::load_lib(const char* libName)
{
std::string strName = libName;
strName += ".so";
__m_lib = dlopen(strName.c_str(),RTLD_LAZY);
if (__m_lib)
{
__m_libName = strName.substr(0,strName.length()-4);
}
return (__m_lib != 0);
}
void* DynamicMgr::get_address(const char* symbolMane)const
{
if (__m_lib)
{
return (void*)dlsym(__m_lib,symbolMane);
}
return NULL;
}
void DynamicMgr::free_lib()
{
if (__m_lib)
{
dlclose(__m_lib);
__m_lib = NULL;
}
}
#endif
/*************************************************************
* Windows System
**************************************************************/
#ifdef _WIN32
bool DynamicMgr::load_lib(const char* libName)
{
std::string strName = libName;
strName += ".dll";
__m_lib = LoadLibraryA(strName.c_str());
if (__m_lib)
{
__m_libName = strName.substr(0,strName.length()-4);
}
return (__m_lib != 0);
}
void* DynamicMgr::get_address(const char* symbolMane)const
{
if (__m_lib)
{
return (void*)GetProcAddress(__m_lib, symbolMane);// be careful __stdcall&&__cdecl
}
return NULL;
}
void DynamicMgr::free_lib()
{
if (__m_lib)
{
FreeLibrary(__m_lib);
__m_lib = NULL;
}
}
#endif