WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Исключения...

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Исключения...
Rambler опубликован 04-01-2002 10:00 MSK   Click Here to See the Profile for Rambler   Click Here to Email Rambler  
Допустим есть указатель *pWnd на объект CWnd. Как узнать узнать существует ли окно? Потому что если окна уже нет, то попытка вызова любой функции путём pWnd->... убивает всю программу. А при проверке на существуемость m_hWnd, генерится какоето исключение, которое почему-то не перехватывается макросами
TRY
{
..
if (pWnd->m_hWnd){}
..
}
CATCH_ALL(e)
{..сюда не попадаем :((..}
END_CATCH_ALL

... а может это всё совсем неправильно? :(

migel опубликован 04-01-2002 10:51 MSK     Click Here to See the Profile for migel  Click Here to Email migel     
Во первых нужно пользовать GetSafeHwnd если указатель нуль то программа не вывалиться.
а для отловки исключения PageFault нужноиспользовать SEH
в MSVC код может быть таким:
__try
{
// что то не хорошее
}
__except (GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION ?
EXCEPTION_EXECUTE_HANDLER :
EXCEPTION_CONTINUE_SEARCH )
{
return;
}
ADK опубликован 04-01-2002 11:25 MSK     Click Here to See the Profile for ADK  Click Here to Email ADK     
Если есть возможность, юзай HWND. CWnd* вообще часто временные и уничтожаются после обработки сообщения. Можешь проверять IsWindow(hwnd) (API) или ::IsWindow((HWND) m_yourWnd) (MFC). Только осторожнее: не напиши ::IsWindow((HWND) m_pyourWnd), где m_pyourWnd это CWnd*.
Правильно: ::IsWindow((HWND) *m_pyourWnd)

А так, конечно, нужно юзать GetSafeHandle() и проверять на нуль.
Rambler опубликован 04-01-2002 12:25 MSK     Click Here to See the Profile for Rambler  Click Here to Email Rambler     
>Во первых нужно пользовать GetSafeHwnd если указатель нуль то программа не вывалиться.
а для отловки исключения PageFault нужноиспользовать SEH

Да.., но если окно было создано, а потом закрыто, то указатель не нуль. И при GetSafeHwnd() программа упадёт, и по-моему исключение Access Violation не сгенерится. Не знаю как поведёт себя в этом случае IsWindow((HWND) m_pyourWnd), или ,наверное, в данном случае IsWindow(pWnd->m_hWnd).

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.