|
Gaudi Framework, version v23r2 |
| Home | Generated: Thu Jun 28 2012 |
#include <DLLClassManager.h>


Public Member Functions | |
| DLLClassManager (IInterface *iface) | |
| virtual | ~DLLClassManager () |
| virtual StatusCode | loadModule (const std::string &module, bool fireIncident=true) |
| Declare a sharable library to be used for creating instances of a given algorithm type. | |
| virtual StatusCode | queryInterface (const InterfaceID &iid, void **pinterface) |
| implementation of IInterface::queryInterface | |
Private Attributes | |
| SmartIF< ISvcLocator > | m_svclocator |
| SmartIF< IMessageSvc > | m_msgsvc |
| SmartIF< IInterface > | m_pOuter |
Definition at line 28 of file DLLClassManager.h.
| DLLClassManager::DLLClassManager | ( | IInterface * | iface ) |
Definition at line 21 of file DLLClassManager.cpp.
{
m_pOuter = iface;
m_svclocator = m_pOuter;
assert(m_svclocator.isValid());
addRef(); // Initial count set to 1
}
| DLLClassManager::~DLLClassManager | ( | ) | [virtual] |
Definition at line 31 of file DLLClassManager.cpp.
{
}
| StatusCode DLLClassManager::loadModule | ( | const std::string & | module, |
| bool | fireIncident = true |
||
| ) | [virtual] |
Declare a sharable library to be used for creating instances of a given algorithm type.
Implements IClassManager.
Definition at line 35 of file DLLClassManager.cpp.
{
// Access the message service if not yet done already
if (!m_msgsvc.isValid()) {
m_msgsvc = m_svclocator;
}
MsgStream log(m_msgsvc, "DllClassManager");
std::string mod = module=="" ? System::moduleNameFull() : module;
if( module == "NONE" ) return StatusCode::SUCCESS;
void* libHandle = 0;
StatusCode status = StatusCode::FAILURE;
try
{
status = System::loadDynamicLib( module, &libHandle);
}
catch ( const std::exception & excpt )
{
if ( m_msgsvc )
{
log << MSG::ERROR << "Exception whilst loading " << module << " : " << excpt.what() << endmsg;
}
status = StatusCode::FAILURE;
}
if( status.isFailure() ) {
// DLL library not loaded
log << MSG::ERROR << "Could not load module " << module << endmsg;
log << MSG::ERROR << "System Error: " << System::getLastErrorString() << endmsg;
return StatusCode::FAILURE;
}
//FIXME this is a hack to avoid a very early call to moduleLoad from
//FIXME AppMgr::i_startup
if (fireIncident && module != "") {
//now fire ModuleLoadedIncident
const bool CREATEIF(true);
SmartIF<IIncidentSvc> pIncidentSvc(m_svclocator->service("IncidentSvc", CREATEIF));
if( !pIncidentSvc.isValid() ) {
log << MSG::FATAL << "Can not locate IncidentSvc" << endmsg;
throw GaudiException("Error retrieving IncidentSvc",
"DLLClassManager::DLLClassManager", StatusCode::FAILURE);
}
pIncidentSvc->fireIncident(ModuleLoadedIncident("DLLClassManager",
module) );
}
return StatusCode::SUCCESS;
}
| StatusCode DLLClassManager::queryInterface | ( | const InterfaceID & | iid, |
| void ** | pinterface | ||
| ) | [virtual] |
implementation of IInterface::queryInterface
Implements IInterface.
Definition at line 86 of file DLLClassManager.cpp.
{
// try local interfaces
StatusCode sc = base_class::queryInterface(iid, pinterface);
if (sc.isSuccess()) return sc;
// fall back on the owner
return m_pOuter->queryInterface(iid, pinterface);
}
SmartIF<IMessageSvc> DLLClassManager::m_msgsvc [private] |
Definition at line 47 of file DLLClassManager.h.
SmartIF<IInterface> DLLClassManager::m_pOuter [private] |
Definition at line 48 of file DLLClassManager.h.
SmartIF<ISvcLocator> DLLClassManager::m_svclocator [private] |
Definition at line 42 of file DLLClassManager.h.