Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Вниз

Программирование Com-порта под WinNT   Найти похожие ветки 

 
AngelOfDarkness ©   (2004-08-16 17:34) [0]

Доброго времени суток. Проблема такая. Написал прогу (не без помощи этого сайта) по передаче данных в com-порт. Вот листинг модуля

unit PortUnit;
interface
uses Windows, SysUtils;
var
 KolByte:DWord;
 ComHandle:THandle;
 DCB : TDCB;
function InitCPort(PortName:PChar):boolean;
procedure KillCPort;
function WriteCPort(SendStr:string):boolean;

implementation
function InitCPort(PortName:PChar):boolean;
var
res:boolean;
begin
 res:=true;
 ComHandle:=CreateFile(PortName,
                       GENERIC_READ or GENERIC_WRITE,
                       0,
                       nil,
                       OPEN_EXISTING,
                       FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
                       0);
 if ComHandle=INVALID_HANDLE_VALUE then res:=false;
 if res then begin
 SetCommMask(ComHandle,EV_RXFLAG);
 GetCommState(ComHandle,DCB);
 DCB.BaudRate:=CBR_9600;
 DCB.Parity:=NOPARITY;
 DCB.ByteSize:=8;
 DCB.StopBits:=OneStopBit;
 DCB.EvtChar:=chr(13);
 SetCommState(ComHandle,DCB);
 PurgeComm(ComHandle,PURGE_TXCLEAR or PURGE_RXCLEAR);
 end;
 InitCPort:=res;
end;

procedure KillCPort;
begin
 CloseHandle(ComHandle);
end;

function WriteCPort(SendStr:string):boolean;
var
 SendByte:array[0..255] of char;
 KolByteW:DWord;
 res:boolean;
begin
 KolByte:=1;
 SendByte[0]:=chr(StrToInt(SendStr));
 WriteFile(ComHandle,SendByte,KolByte,KolByteW,nil);
 if KolByte=KolByteW then res:=true
                     else res:=false;
 WriteCPort:=res;
end;

end.


Под операционкой Win98 все работает, т.е. осциллограф, присоединенный ко 2 и 5 ногам порта подает признаки жизни :)
А вот с W2k начитаются проблемы. В функции WriteCPort значения переменных KolByte и KolByteW не совпадают.
Если кто сможет объяснить в чем дело, буду очень признателен.


 
jack128 ©   (2004-08-16 17:42) [1]

Если чесно мне странно, почему это в Win9x работает.. Учитывая
> CreateFile(PortName,
>                        GENERIC_READ or GENERIC_WRITE,
>                        0,
>                        nil,
>                        OPEN_EXISTING,
>                        FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED,
>                        0)

и


> WriteFile(ComHandle,SendByte,KolByte,KolByteW,nil);


 
jack128 ©   (2004-08-16 17:47) [2]

простейший путь для тебя убрать флаг FILE_FLAG_OVERLAPPED
и еще написать Win32Check(WriteFile(ComHandle,SendByte,KolByte,KolByteW,nil));


 
AngelOfDarkness ©   (2004-08-16 18:47) [3]

Огромное спасибо. Все заработало после удаления флага FILE_FLAG_OVERLAPPED. Просто я все делал по примеру со страницы http://www.delphimaster.ru/articles/comport2/index.html#PageTop, а там именно так написано.


 
jack128 ©   (2004-08-16 23:23) [4]

вот только заливать не надо, а?
Сopy - Paste из статьи
KolByte:=1;
Transmit[0]:=chr(A);
WriteFile(CommHandle,Transmit,KolByte,KolByte,@Ovr);



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

Форум: "WinAPI";
Текущий архив: 2004.09.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.03 c
1-1094635659
off
2004-09-08 13:27
2004.09.26
Правильная отрисовка канвы при скролинге


14-1094307463
AlexG
2004-09-04 18:17
2004.09.26
ВАУ!!! Пейнтбол!!


1-1094994303
Gear
2004-09-12 17:05
2004.09.26
Как в ListBox красиво обрезать строки по ширине ListBox, и ...


8-1088672139
Tatarin
2004-07-01 12:55
2004.09.26
Эквалайзер


14-1094152253
_silver
2004-09-02 23:10
2004.09.26
Скоро ехать на военную кафедру.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский