Finish the dynamic loading of modules
This commit is contained in:
@@ -239,21 +239,22 @@ Void ModulesHandle::processOpt( Int index )
|
||||
|
||||
Void ModulesHandle::loadExternalModule()
|
||||
{
|
||||
Bool bUpdate = false;
|
||||
QString supported = tr( "Supported Files (*.so)" );
|
||||
QStringList formatsList;
|
||||
formatsList << "Shared Libraries (*.so)";
|
||||
|
||||
QStringList filter;
|
||||
filter << supported
|
||||
<< formatsList
|
||||
<< tr( "All Files (*)" );
|
||||
QStringList fileNames = QFileDialog::getOpenFileNames( m_pcParent, tr( "Open File" ), QString(), filter.join( ";;" ) );
|
||||
|
||||
QString fileName = QFileDialog::getSaveFileName( m_pcParent, tr( "Open File" ), QString(), filter.join( ";;" ) );
|
||||
if( !fileName.isEmpty() )
|
||||
for( Int i = 0; i < fileNames.size(); i++ )
|
||||
{
|
||||
PlaYUVerModuleFactory::Get()->RegisterDl( fileName.toStdString().data() );
|
||||
buildMenu();
|
||||
bUpdate |= PlaYUVerModuleFactory::Get()->RegisterDl( fileNames.at( i ).toStdString().data() );
|
||||
}
|
||||
if( bUpdate )
|
||||
buildMenu();
|
||||
}
|
||||
|
||||
Void ModulesHandle::activateModule()
|
||||
|
||||
@@ -27,6 +27,8 @@
|
||||
namespace plaYUVer
|
||||
{
|
||||
|
||||
REGISTER_CLASS_MAKER( FrameBinarization )
|
||||
|
||||
FrameBinarization::FrameBinarization()
|
||||
{
|
||||
/* Module Definition */
|
||||
|
||||
@@ -61,17 +61,22 @@ Void PlaYUVerModuleFactory::Register( const char* moduleName, CreateModuleFn pfn
|
||||
m_FactoryMap[moduleName] = pfnCreate;
|
||||
}
|
||||
|
||||
Void PlaYUVerModuleFactory::RegisterDl( const char* dlName )
|
||||
Bool PlaYUVerModuleFactory::RegisterDl( const char* dlName )
|
||||
{
|
||||
void *pHndl = dlopen( dlName, RTLD_NOW );
|
||||
if( pHndl == NULL )
|
||||
{
|
||||
std::cerr << dlerror()
|
||||
<< std::endl;
|
||||
exit( -1 );
|
||||
return false;
|
||||
}
|
||||
CreateModuleFn pfnCreate = ( CreateModuleFn )dlsym( pHndl, "Maker" );
|
||||
if( pfnCreate == NULL )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
CreateModuleFn pfnCreate = (CreateModuleFn) dlsym( pHndl, "CreateModule" );
|
||||
Register( dlName, pfnCreate );
|
||||
return true;
|
||||
}
|
||||
|
||||
PlaYUVerModuleIf *PlaYUVerModuleFactory::CreateModule( const char* moduleName )
|
||||
|
||||
@@ -58,7 +58,7 @@ public:
|
||||
}
|
||||
|
||||
Void Register( const char* moduleName, CreateModuleFn pfnCreate );
|
||||
Void RegisterDl( const char* dlName );
|
||||
Bool RegisterDl( const char* dlName );
|
||||
|
||||
PlaYUVerModuleIf *CreateModule( const char *moduleName );
|
||||
PlaYUVerModuleFactoryMap& getMap()
|
||||
|
||||
Reference in New Issue
Block a user