Вниз
Скачать: 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.013 c
1-1507
IgoX
2003-08-17 21:27
2003.09.01
TreeView


6-1521
tiam
2003-06-26 14:03
2003.09.01
Net send средствами Делфи.


1-1432
opoloXAI
2003-08-18 10:10
2003.09.01
RichEdit.Lines.Count > 460


14-1601
MsGuns
2003-08-13 20:14
2003.09.01
Комментарий к репортажу


1-1373
Question
2003-08-16 18:03
2003.09.01
Указателю на динамический массив значения после GetMem




   Наверх