Мастер участка
Группа: Участник
Сообщений: 304
|
Есть класс CRightGroup /*то биш права группы пользователей*/. У него метод SetRights с параметрами НОВЫЕ ПРАВА и ССЫЛКА НА РЕДАКТИРУЮЩУЮ ГРУППУ (то есть группу, к которой принадлежит пользователь, пытающийся отредактировать права данной группы). В случае отсутствия прав метод кидает исключение типа char* ,мол прав нету.
Это я делаю так:
CODE |
void CRightGroup::SetRight(int NewRight,CRightGroup *RGMember)
{
if(RGMember == 0) Rights = NewRight;
else
{
if(RGMember->Rights & RI_EDITGROUPS) Rights = NewRight;
else throw "НЕТ ПРАААААВ!";
}
}
|
Дальше пытаюсь отловить его в программе и делаю так:
CODE |
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (char *ErrMsg) // По задумке, этот блок должен его поймать.
{
Application->MessageBoxA(ErrMsg,"Access denied", MB_ICONWARNING|MB_OK);
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
|
Но ничего подобного не происходит. Выполнение не заходит ни в один из этих catch()-блоков.
Собственно код специально вызывающий исключение:
CODE |
CRightGroup C; // Создаю группу. Она сразу создается с максимальными правами
ShowMessage(C.GetRight(&C));//Сам себя проверяю
C.SetRight(RI_NONE,&C); // Устанавливаю нулевые права группы. Устанавливающая группа — C (ей-то все можно)
C.SetRight(RI_EDITGROUPS,&C); // теперь прав нет, а группа пытается выставить себе права на редактирование групп. Должен возникнуть exception.
// он-то и возникает, но обрабатывается неведомым мне обработчиком.
|
Как быть? Может есть способы красивее?
Отредактировано exp — 02/12/2005, 23:52
|