В моей программе есть следующий фрагмент кода, который динамически связывает файл wtsapi32.dll для уведомлений о сеансах, таких как WTS_SESSION_LOCK
и WTS_SESSION_UNLOCK
, и работает в фоновом режиме. После первой блокировки / разблокировки программа зависает и не отвечает.
Это правильный способ делать явные ссылки?
void RegisterSession(HWND hwnd)
{
typedef DWORD (WINAPI *tWTSRegisterSessionNotification)( HWND,DWORD );
tWTSRegisterSessionNotification pWTSRegisterSessionNotification=0;
HINSTANCE handle = ::LoadLibrary("wtsapi32.dll");
pWTSRegisterSessionNotification = (tWTSRegisterSessionNotification) :: GetProcAddress(handle,"WTSRegisterSessionNotification");
if (pWTSRegisterSessionNotification)
{
pWTSRegisterSessionNotification(hwnd,NOTIFY_FOR_THIS_SESSION);
}
::FreeLibrary(handle);
handle = NULL;
}
Отредактировано:
У меня есть другой метод UnRegisterSession (), который вызывает WTSUnRegisterSessionNotification, я вызываю RegisterSession () в методе WinMain (удалено FreeLibrary, как предложено 1800) и вызываю UnRegisterSession () в WM_DESTROY функции CALLBACK WindowProcedure. Но все равно приложение зависает.