![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Всем привет=)
Писала программу, которая обращается к COM-порту: пока что просто открывает/закрывает его. Открывает нормально, а при закрытии выдается ошибка: "Project project1.exe raised exception class EExternalException with message 'External exception C0000008'. Process stopped. Use Step or Run to continue." Фрагмент программы: Код:
var Port:THandle; begin if button1.Caption='Открыть' then begin Port:=CreateFile( '\\.\COM3', GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 ); if (port=INVALID_HANDLE_VALUE) then showmessage('Ошибка!') else begin showmessage('Порт открыт'); button1.Caption:='Закрыть'; end; end else if button1.Caption='Закрыть' then begin showmessage('Порт закрыт'); CloseHandle (port);// тут тупая ошибка button1.Caption:='Открыть'; end; end; |
#2
|
||||
|
||||
![]() Пользуемся тегом CODE!!!
Почему новоприбывшие никогда не читают правила? >_< Если не ты, то кто? (с) Терри Пратчетт Не забывайте ставить плюсы и говорить спасибо! |
#3
|
||||
|
||||
![]() Простите, прочитала послание начинающим в 4м топике, а правила забыла
![]() |
#4
|
||||
|
||||
![]() Код:
procedure TForm1.Button1Click(Sender: TObject); var CommPort : string; hCommFile : THandle; Buffer : PCommConfig; size : DWORD; begin CommPort := 'COM1'; {Открываем Com-порт} hCommFile := CreateFile(PChar(CommPort), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hCommFile=INVALID_HANDLE_VALUE then begin ShowMessage('Unable to open '+ CommPort); exit; end; {Выделяем временный буфер} GetMem(Buffer, sizeof(TCommConfig)); {Получаем размер структуры CommConfig} size := 0; GetCommConfig(hCommFile, Buffer^, size); {Освобождаем временный буфер} FreeMem(Buffer, sizeof(TCommConfig)); {Выделяем память для структуры CommConfig} GetMem(Buffer, size); GetCommConfig(hCommFile, Buffer^, size); {Изменяем скорость передачи} Buffer^.dcb.BaudRate := 1200; {Устанавливаем новую конфигурацию для COM-порта} SetCommConfig(hCommFile, Buffer^, size); {Освобождаем буфер} FreeMem(Buffer, size); {Закрываем COM-порт} CloseHandle(hCommFile); end; Последний раз редактировалось movnet, 29.01.2011 в 19:45. |
#5
|
||||
|
||||
![]() Спасибо, но мне просто нужно, чтобы при втором нажатии на кнопку порт закрывался без ошибки.
|
#6
|
|||
|
|||
![]() Цитата:
Код:
var Port:THandle; Похоже на описание локальной переменной. Как ты понимаешь, после выхода из обработчика после первого нажатия кнопки значение этой переменной будет утеряно. Сделай эту переменную глобальной или вообще членом класса. Тогда ошибка должна пропасть. |
#7
|
||||
|
||||
![]() Спасибо большое, уже разобралась.
|