Отладка приложений


         

Если это последний элемент данного


 g_shared_iUsedSlots- -;

// Декремент счетчика элементов этого процесса.

 g_iThisProcessItems- -;

TRACE ( _Т ( "RemoveNotifyTitle - Removed an item!\n")); 

ReleaseMutex ( g_hMutex);

// Если это последний элемент данного процесса, завершить 

// его обработку.

if ( ( 0 == g_iThisProcess!tems) && ( NULL != g_hHook)) 

{

if ( FALSE = UnhookWindowsHookEx ( g_hHook))

{

TRACE ( _T ( "UnhookWindowsHookEx failed!\n"));

}

g_hHook = NULL; 



} HWND TNOTIFYHLP_DLLINTERFACE _stdcall

CheckNotifyCreateTitle ( HANDLE hltem)

{

return ( (HWND)CheckNotifyltem ( hltem, TRUE));

}

BOOL TNOTIFYHLP_DLLINTERFACE _stdcall

CheckNotifyDestroyTitle ( HANDLE hltem) 

{

return ( (BOOL)CheckNotifyltem ( hltem, FALSE)); 



/*///////////////////////////////////////////////////////////////

ЗДЕСЬ НАЧИНАЕТСЯ ВНУТРЕННЯЯ РЕАЛИЗАЦИЯ

////////////////////////////////////////////////////////////////*/ 

static LONG _stdcall CheckNotifyltem { HANDLE hltem, BOOL bCreate)

{

// Проверить значение.

int i = (int)hltem;

if ( ( i < 0) || ( i > TOTAL_NOTIFY_SLOTS))

{

TRACE ( _T ( "CheckNotifyltem : Invalid handle!\n"));

return ( NULL); 

}

LONG IRet = 0; 

// Получить мьютекс.

DWORD dwRet = WaitForSingleObject ( g_hMutex, k_WAITLIMIT);

 if ( WAIT_TIMEOUT == dwRet) 

{

TRACE ( _T ( "CheckNotifyltem : Wait on mutex timed out!\n"));

return ( NULL);

 }

// Если все слоты пусты, освобождаем мьютекс.

 if ( 0 = g_shared_iUsedSlots) 

{

ReleaseMutex ( g_hMutex);

return ( NULL); 

}

// Проверить затребованный элемент, 

if ( TRUE == bCreate)

 {

// Если HWND-значение не NULL, возвратить это значение

//и обнулить его в таблице.

if ( NULL != g_shared_NotifyData[ i ].hWndCreate)

{

IRet = (LONG)g_shared_NotifyData[ i ].hWndCreate; 

g_shared_NotifyData[ i ].hWndCreate = NULL;

}

 }

else 

{

if ( FALSE != g_shared_NotifyData[ i ].bDestroy)


Содержание  Назад  Вперед