Форум: "WinAPI";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
ВнизЧтение с СОМ-порта... Найти похожие ветки
← →
Devider © (2005-11-18 15:30) [0]Необходимо считать с СОМ, к которому подключен девайс для считывания с магнитной карты. Хочу, в Edit1 появился номер карты. Пишу:
// переменные :
strdcb:DCB;
cto:COMMTIMEOUTS;
hCom :Integer;
chOut :array[1..100] of char;
chIn :array[1..100] of char;
Temp :DWORD;
hdc :HDC;
i:integer;
a:integer;
// настройки порта при создании формы:
hCom:=CreateFile("COM1",GENERIC_WRITE and GENERIC_READ,0,psa,OPEN_EXISTING,0,0); //Ñîçäàåì CÎÌ-ïîðò
GetCommState(hCom,strdcb);
strdcb.BaudRate:=CBR_9600;
strdcb.ByteSize:=8;
strdcb.Parity:=NOPARITY;
strdcb.StopBits:=ONESTOPBIT;
SetCommState(hCom,strdcb);
cto.ReadIntervalTimeout := 0;
cto.ReadTotalTimeoutConstant:=0;
cto.ReadTotalTimeoutMultiplier:=10;
cto.WriteTotalTimeoutConstant:=0;
cto.WriteTotalTimeoutMultiplier:=0;
SetCommTimeouts(hCom,cto);
SetupComm(hCom,sizeof(chOut),sizeof(chOut));
PurgeComm(hCom,PURGE_RXCLEAR);
PurgeComm(hCom,PURGE_TXCLEAR);
// запущаем таймер
ComTimer.Enabled:=true;
end;
// по таймеру происходит вот что:
ReadFile(hCom,chOut,100,Temp,nil);
Edit1.Text:=chOut;
А в Эдите ничего не отображается. Непойму, почему.
Помогите разобраться, пожалуйста!
← →
Digitman © (2005-11-18 15:48) [1]ты что-либо слышал про отличие функции и процедуры ?
← →
Devider © (2005-11-18 15:53) [2]ты не мог бы поконкретнее?
← →
Leonid Troyanovsky © (2005-11-18 16:14) [3]
> Devider © (18.11.05 15:53) [2]
> ты не мог бы поконкретнее?
Можно и конкретней.
Однако, для этого необходимо уяснить уровень подготовки.
Есть ли смысл рассказывать про космические корабли,
бороздящие просторы .. Большого театра.
--
Regards, LVT.
← →
Devider © (2005-11-18 16:27) [4]Ну, на уровне осознания отличий функции от процедуры, это однозначно. Я вообще льщу себе надеждой, что повыше будет. Да объясните уже, не томите, мож у меня мозг просто к концу недели спекся!
Предистория такая: есть аналогичный код на С++, а это его попытка перевести на Дельфи.
← →
Ботвин Дмитрий (2005-11-18 16:31) [5]Devider © (18.11.05 15:30)
ReadFile что возвращает? И что пишет GetLastError по этому поводу?
← →
Leonid Troyanovsky © (2005-11-18 16:36) [6]
> Devider © (18.11.05 16:27) [4]
> Ну, на уровне осознания отличий функции от процедуры, это
> однозначно. Я вообще льщу себе надеждой, что повыше будет.
Например, ReadFile
If the function fails, the return value is zero.
To get extended error information, call GetLastError.
Хотя, положено нАчать еще раньше, т.е. c CreateFile
If the function fails, the return value is INVALID_HANDLE_VALUE.
To get extended error information, call GetLastError.
Т.е., Win32Check тебе в руки и вперед.
И нам понятней будет.
--
Regards, LVT.
← →
Devider © (2005-11-18 18:09) [7]Порт открывается, закрывается, как в известной детской передаче.
Оказалось, косячит ReadFile().
По крайней мере, на строку
if (ReadFile(hCom,chOut,100,Temp,nil) = false) then Edit1.Text := "Опаньки";
я это "Опаньки" и получаю...
← →
Devider © (2005-11-18 18:57) [8]Фсе я наврал.
hCom:=CreateFile("COM1",GENERIC_READ,0,psa,OPEN_EXISTING,0,0);
if (hCom = INVALID_HANDLE_VALUE) then exit;
//.....................................
//настройки порта, см выше.
ShowMessage("Done"); // это последняя строчка
Если я вижу это собщение, значит, дескриптор все-таки верный, правильно?
Но:
b:=ReadFile(hCom,chOut,100,Temp,nil);
if (b = false) then begin
Edit1.Text := SysErrorMessage(GetLastError);
exit;
end;
Edit1.Text := chOut;
этот кусок выдает "неверный дескриптор".. Это как понять?
← →
Devider © (2005-11-18 19:03) [9]Вернее даже так:
после:
hCom:=CreateFile("COM1",GENERIC_READ,0,psa,OPEN_EXISTING,0,0);
SysErrorMessage(GetLastError) выдает "Неверная попытка доступа к адресу памяти". Ниччего не понимаю...
← →
tesseract © (2005-11-20 18:19) [10]
port:pchar;
port="COM1";
hCom:=CreateFile(Port,GENERIC_READ OR GENERIC_WRITE,0,NIL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
// Если неверен выходим
if hCom=INVALID_HANDLE_VALUE then exit;
так точно работает
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.097 c