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


         

Если это первый запрос уведомления,


// Если это первый запрос уведомления, активизировать подключение.

 if ( NULL = g_hHook)

 {

g_hHook = SetWindowsHookEx ( WH_CALLWNDPROCRET ,

CallWndRetProcHook, g_hlnst , 0 );

 #ifdef _DEBUG

if ( NULL == g_hHook)

 {

char szBuff[ 50 ];

 wsprintf ( szBuff,

_T ( "SetWindowsHookEx failed!!!! (Ox%08X)\n"), GetLastError ()); 

TRACE ( szBuff); 

}

#endif 

}

return ( (HANDLE)!); 



void TNOTIFYHLP_DLLINTERFACE _stdcall

RemoveNotifyTitle ( HANDLE hltem) 

{

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

int i = (int)hltem;

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

{

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

  return; 

}

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

DWORD dwRet = WaitForSingleObject ( g_hMutex, k_WAITLIMIT);

 if ( WAIT_TIMEOUT == dwRet) 

{

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

  return; 

}

if ( 0 = g_shared_iUsedSlots) 

{

TRACE ( _T ( "RemoveNotifyTitle : Attempting to remove when "

"no notification handles are set!\n")); 

ReleaseMutex ( g_hMutex);

  return; 

}

// Перед удалением чего-то, удостоверьтесь, что этот индекс указывает 

// на вход NotifyData, который содержит правильное значение. Без

 // проверки можно вызывать эту функцию с тем же значением

 // несколько раз, что запортит индексы используемых слотов.

if ( 0 == g_shared_NotifyData[ i ].dwOwnerPID) 

{

TRACE ( "RemoveNotifyTitle : Attempting to double remove!\n");

ReleaseMutex ( g_hMutex);

return; 

}

// Удалить этот элемент из массива. 

g_shared_NotifyData[ i ].dwOwnerPID =0; 

g_shared_NotifyData[ i ].iNotifyType = 0;

 g_share.d_NotifyData [ i ] .hWndCreate = NULL;

 g_shared_NotifyData[ i ].bDestroy = FALSE; 

g_shared_NotifyData[ i ].iSearchType = 0;

 g_shared_NotifyData[ i ].szTitle[ 0 ] = _T ( '\0');

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


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