Вниз
Скачать: CL | DM;

com под win2000   Найти похожие ветки 

← →
KPY ©   (2003-06-18 13:18) [0]

под 98 все работает, чего не хватает 2000-му

procedure set_com;
begin
DCB.DCBlength:=SizeOf(Tdcb);
DCB.BaudRate:=cbr_9600;
DCB.ByteSize:=8;
DCB.Parity:=4;
if not SetCommState(com, DCB) then raise Excom.Create("set_com");
end;

function open_com: boolean;
begin
if is_open then closeHandle(com);
com := CreateFile(PChar("Com1"), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if GetCommState(com,DCB)then is_open:=true else is_open:=false;
Result:=is_open;
end;

procedure getb(var ok: boolean);
var res: dword;
begin
ReadFile(com, ArrayRead, 21, res, nil);
ok:=(res=21);
end;

procedure putb(b: byte; var ok: boolean);
var res: dword;
flages:boolean;
begin
flages:=True;
WriteFile(com,b,1,res,nil);
( res=1) под 98 все работает, чего не хватает 2000-му

procedure set_com;
begin
DCB.DCBlength:=SizeOf(Tdcb);
DCB.BaudRate:=cbr_9600;
DCB.ByteSize:=8;
DCB.Parity:=4;
if not SetCommState(com, DCB) then raise Excom.Create("set_com");
end;

function open_com: boolean;
begin
if is_open then closeHandle(com);
com := CreateFile(PChar("Com1"), GENERIC_READ or GENERIC_WRITE,
0, nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0);
if GetCommState(com,DCB)then is_open:=true else is_open:=false;
Result:=is_open;
end;

procedure getb(var ok: boolean);
var res: dword;
begin
ReadFile(com, ArrayRead, 21, res, nil);
ok:=(res=21);
end;

procedure putb(b: byte; var ok: boolean);
var res: dword;
flages:boolean;
begin
flages:=True;
WriteFile(com,b,1,res,nil);
ok:=(res=1);
end;


← →
clickmaker ©   (2003-06-18 13:40) [1]

В каком именно месте не работает? Что говорит GetLastError?


← →
pasha676   (2003-06-18 16:54) [2]

Я предпочитаю формировать DCB так:
Беру DCB
Изменяю в DCB нужные поля
Устанавливаю DCB.


> function open_com: boolean;
> begin
> if is_open then closeHandle(com);

Я конечно не знаю. Но это вроде рекурсия. Нафига нужна рекурсия для открытия порта? Рекурсия такая фенька, что если без нее можно обойтись, то нужно без нее. Честно признаюсь - не понимаю как у тебя с такой фишкой вообще что-то работало. Объясните мне, неразумному, как это работает?

Идем дальше


> ReadFile(com, ArrayRead, 21, res, nil);
> ok:=(res=21);

Я конечно не знаю. Но я бы так использовать функцию не стал. А тем более делать вывод о правильности приема. Хотя как ты эту функцию используешь - фиг знает. Тоже касаеться и функции записи в порт.


← →
pasha676   (2003-06-18 16:56) [3]

Дико извините. В рекурсией я погорячился. is_open не есть open_comm. Хотя имхо - все равно коряво. Достаточно анализировать handle. Но на работоспособность влиять не должно.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.012 c
7-1677
HellTrooper
2003-06-16 15:54
2003.09.01
При выключении компа...


14-1612
Мазут Береговой
2003-08-12 10:41
2003.09.01
Ну, тока шо прикололся! :-)


3-1329
Fants
2003-08-11 09:47
2003.09.01
Документация по FIBPlus


1-1387
Spawn
2003-08-16 10:44
2003.09.01
Опять Word


6-1541
BlackSun
2003-06-26 18:42
2003.09.01
RasGetEntryDialParams - не могу получить номер телефона




   Наверх