CDllDrvObj::~CDllDrvObj() { LOCK_MUTEX( m_objMutex ); for ( int i = 0; i<VSCP_LOGGER_DRIVER_MAX_OPEN; i++ ) { if ( NULL == m_drvObjArray[ i ] ) { Cudpdrv *pdrvObj = getDriverObject( i ); if ( NULL != pdrvObj ) { pdrvObj->close(); delete m_drvObjArray[ i ]; m_drvObjArray[ i ] = NULL; } } } UNLOCK_MUTEX( m_objMutex ); #ifdef WIN32 CloseHandle( m_objMutex ); #else pthread_mutex_destroy( &m_objMutex ); #endif }
extern "C" long VSCPOpen( const char *pUsername, const char *pPassword, const char *pHost, short port, const char *pPrefix, const char *pParameter, unsigned long flags ) #endif { long h = 0; Cudpdrv *pdrvObj = new Cudpdrv(); if ( NULL != pdrvObj ) { if ( pdrvObj->open( pUsername, pPassword, pHost, port, pPrefix, pParameter, flags ) ){ if ( !( h = theApp->addDriverObject( pdrvObj ) ) ) { delete pdrvObj; } } else { delete pdrvObj; } } return h; }
extern "C" int VSCPClose( long handle ) #endif { int rv = 0; Cudpdrv *pdrvObj = theApp->getDriverObject( handle ); if ( NULL == pdrvObj ) return 0; pdrvObj->close(); theApp->removeDriverObject( handle ); rv = 1; return CANAL_ERROR_SUCCESS; }