![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; Похоже на описание локальной переменной. Как ты понимаешь, после выхода из обработчика после первого нажатия кнопки значение этой переменной будет утеряно. Сделай эту переменную глобальной или вообще членом класса. Тогда ошибка должна пропасть. |