Форум: "Система";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
ВнизпортCOM где лоханулся Найти похожие ветки
← →
Jura (2003-05-14 11:56) [0]Я делаю так
DataBuf: byte;
Bytes: DWord;
Bufsize=1;
HCOM:=CreateFile(Pchar(Port),GENERIC_READ,0,NIL,
OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
Readfile(HCOM,DataBuf,Bufsize,Bytes,nil);
Вывожу на печать DataBuf и ни фига хотя я знаю что порт не пустой
← →
AlexRush (2003-05-14 13:41) [1]Общение с COM присходит асинхронно (используется структура OVERLAPPED)
var
fComNumber:BYTE;
dwTransfered :DWORD;
dwReaded :DWORD;
dwWrited :DWORD;
hCom :DWORD;
owr :OVERLAPPED;
buf :packed array of char;
function OpenComm(CommNumber:BYTE):DWORD;
var strCommName:string;
begin
strCommName:="COM"+Char((CommNumber and $08)+$31)+#0;
result:=CreateFileA(@strCommName[1],
GENERIC_READ or GENERIC_WRITE,
0,
nil,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED{},
0);
ZeroMemory(@owr,sizeof(owr));
owr.hEvent:=CreateEvent(nil,TRUE,FALSE,nil);
end;
//У меня чтение в отдельном потоке
procedure ReadCommThreadProc;stdcall;
begin
while true
do begin
ZeroMemory(@buf[0],BUF_SIZE);
dwReaded:=0;
dwTransfered:=0;
if not ReadFile(hCom,
@buf[0],
1024,
@dwReaded,
@owr)
then begin
case GetLastError() of
ERROR_IO_PENDING: begin
if WAIT_OBJECT_0
=WaitForSingleObject(hCom,INFINITE)
then begin
if not GetOverlappedResult(hCom,owr,dwTransfered,TRUE)
then begin
LastErrorMsg("GetOverlappedResult");
break;
end
else dwReaded:=dwTransfered;
end
else begin
LastErrorMsg("WaitForSingleObject");
break;
end;
end;
else begin
LastErrorMsg("ReadFile");
break;
end;
end;
end
else begin
dwTransfered:=dwReaded;
end;
frmMain.AddIN;
Sleep(10);
end;
ExitThread(0);
end;
← →
Jura (2003-05-14 15:24) [2]Большое спасибо.
Бегу в ун-т.Вернусь, постараюсь допетрить.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c