CSourceLoader::~CSourceLoader(void) { /* CString szLibrary; CString szModule; for (POSITION pos = m_LibraryMap.GetStartPosition(); pos != NULL; ) { szModule.Empty(); m_LibraryMap.GetNextAssoc(pos, szLibrary, szModule); HMODULE_ hModule = (HMODULE_)atol((const char *)szModule); if (hModule) FreeLibrary(hModule); } */ map<const char*, HMODULE_>::iterator iter = m_LibraryMap.begin(); while (iter != m_LibraryMap.end()) { HMODULE_ hModule = (HMODULE_)iter->second; if (hModule) FreeLib(hModule); iter ++; } m_LibraryMap.clear(); pthread_mutex_destroy(&m_csLock); }
//--------------------------------------------------------------------------- FARPROC __fastcall CXWave::GetProc(LPCSTR pName) { if( !m_hLib ) return NULL; FARPROC fn = ::GetProcAddress(m_hLib, pName+1); if( fn == NULL ){ fn = ::GetProcAddress(m_hLib, pName); if( fn == NULL ) FreeLib(); } return fn; }
//--------------------------------------------------------------------------- __fastcall CXWave::~CXWave(void) { if( m_nTimerID ){ ::KillTimer(NULL, m_nTimerID); } if( m_hLib ){ fmmwOutAbort(); fmmwInClose(); } FreeLib(); }
DynamicLib::~DynamicLib(void) { //如果还保留着句柄 和 名称的话,进行清理 if (m_hDynLib != NULL) { FreeLib(); } // if (m_pszLibName != NULL) // { // free(m_pszLibName); // m_pszLibName = NULL; // } }
//--------------------------------------------------------------------------- __fastcall CXWave::CXWave(LPCSTR pName) { m_ItemName = pName; m_nTimerID = 0; char Name[MAX_PATH]; if( !*GetEXT(pName) ){ wsprintf(Name, "%s.mmw", pName); pName = Name; } m_hLib = ::LoadLibrary(pName); if( m_hLib ){ fmmwPumpMessages = PROC(mmwPumpMessages); fmmwSetPTT = PROC(mmwSetPTT); fmmwGetTimeout = PROC(mmwGetTimeout); fmmwInOpen = PROC(mmwInOpen); fmmwInClose = PROC(mmwInClose); fmmwInRead = PROC(mmwInRead); fmmwGetInExist = PROC(mmwGetInExist); fmmwIsInCritical = PROC(mmwIsInCritical); fmmwOutOpen = PROC(mmwOutOpen); fmmwOutAbort = PROC(mmwOutAbort); fmmwOutFlush = PROC(mmwOutFlush); fmmwOutWrite = PROC(mmwOutWrite); fmmwIsOutCritical = PROC(mmwIsOutCritical); fmmwIsOutFull = PROC(mmwIsOutFull); fmmwGetOutRemaining = PROC(mmwGetOutRemaining); fmmwGetOutCounter = PROC(mmwGetOutCounter); fmmwSetOutCounter = PROC(mmwSetOutCounter); if( !m_hLib ){ FreeLib(); } else { //m_nTimerID = ::SetTimer(NULL, 0, 50, (int (__stdcall *)())TimeProc); //$$$ m_nTimerID = SetTimer(NULL, 0, 50, TimeProc); } } }
void winio_clean() { if (pShutdownWinIo) pShutdownWinIo(); FreeLib(); }