Russian Qt Forum

Компиляторы и платформы => Windows => Тема начата: kuzulis от Май 08, 2009, 13:11



Название: Exception при вызове CloseHandle
Отправлено: kuzulis от Май 08, 2009, 13:11
Доброго дня!

Я тут занялся написанием класса для работы с последовательными портами в Windows!

и вот при реализации ф-ции void TWinSerialDevice::close() у меня приложение вылетает !

Код:
void TWinSerialDevice::close() {
    if ((hd!=INVALID_HANDLE_VALUE) && (oldSettingsIsSaved) && isOpen()) {
        //восстанавливаем старые сохраненные параметры устройства
        if (SetCommConfig(hd, &oldcc, sizeof(COMMCONFIG))==0) {
            TTY_PORTABILITY_DEBUG("TWinSerialDevice::close->SetCommConfig(oldcc)! Error!");
        }
        if (CloseHandle(hd)==0) { ///  ВОТ ТУТ ВЫЛЕТАЕТ!!!!!
            TTY_PORTABILITY_DEBUG("TWinSerialDevice::close->CloseHandle! Error!");
        }
    }//if isOpen() &&&&&
    QIODevice::close();
}

Я уже замучался и не знаю от чего это ??!! Помогите разобраться! :(


Название: Re: Exception при вызове CloseHandle
Отправлено: kuzulis от Май 08, 2009, 14:10
Хотя вот тут : http://www.vsokovikov.narod.ru/New_MSDN_API/Handles_objects/fn_closehandle.htm

написано
Цитировать
...
Эта функция породит исключительную ситуацию, если или значение дескриптора, которое не допустимо (или 0) или значение псевдо-дескриптора, задается как значение hObject, а приложение запущено в среде отладчика. Это включает в себя закрытие дескриптора дважды и использование функции CloseHandle для дескриптора, возвращенного функцией FindFirstFile.
...
Обратите внимание! на то, что эта функция не будет порождать исключительную ситуацию тогда, когда значение дескриптора, которое не допустимо или значение псевдо-дескриптора, задается, а приложение не запущено в среде отладчика.

и как это понять?


Название: Re: Exception при вызове CloseHandle
Отправлено: Tonal от Май 12, 2009, 11:26
Под отладчиком CloseHandle возбуждает исключение если параметр косячный.
Без отладчика исключения не будет и сработает твой if.


Название: Re: Exception при вызове CloseHandle
Отправлено: kuzulis от Май 12, 2009, 12:02
Хм...  странно как то всё, т.к. я использую асинхронный режим работы последовательного порта и такую переменную как OVERLAPPED ,
и когда я писал в коде так:
Код:
.....
OVERLAPPED ovl;
.....
то приложение вылетало с эксепшеном, но но когда я писал так:
Код:
.....
OVERLAPPED ovl;
Zeromemory(&ovl, sizeof(ovl));
.....
то вылетать перестало

:) мистика !


Название: Re: Exception при вызове CloseHandle
Отправлено: crackedmind от Май 12, 2009, 13:52
Цитировать
мистика !
вообще то не мистика )