![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Чтение данных из компорта [D7, WinXP]
pavel_guzhanov © (2004-07-09 14:25:00)Подскажите пожалуйста, для чтения данных, пришедших в компорт использую
ReadFile(H,Buf,Size,Total,nil)
Как нужно объявить переменную Buf перед отправкой ее в эту функцию? Может я чтото туплю, но второй день не могу с этим справиться
GanibalLector (2004-07-11 01:38:00) [1]Вот тебе(счастье):
function ReadComm(Handle:THandle; var Bfr:AnsiString):Integer;
var
I,J:DWord;
begin
Result:=0;
J:=Length(Bfr);
repeat
ReadFile(Handle, Bfr[Result+1], J-DWord(Result), I, nil);
Inc(Result,Integer(I));
if DWord(Result)=J then break;
until I=0;
end;
AndrewVolkov (2004-07-10 14:30:00) [2]to tesseract
точнее не читать, а резервировать
AndrewVolkov (2004-07-10 13:49:00) [3]to tesseract
да не замечал как-то проблем.
А нафига мне каждый раз 10000 к примеру читать, если всего 2 байта к примеру заходит?
MBo (2004-07-10 12:54:00) [4]>Динамические массивы по ссылке передавать нельзя!
Да ну?
tesseract (2004-07-10 12:51:00) [5]Динамические массивы по ссылке передавать нельзя! лучше пошли pointer потом в цикле разбирай. или обычный массив с размером заведомо большим полученных данных. я так и поступаю.
AndrewVolkov (2004-07-09 21:06:00) [6]Var
Stat : TComStat;
Resive:array of char;
Kols:Integer;
CommHandle : integer;
Ovr : TOverlapped;
...
ClearCommError(CommHandle,Errs,@Stat);//Sbrasivajem flag
Kols :=Stat.cbInQue;//uznajem kol-vo bajt voshedshih v port
SetLength(Resive, Kols);//vistavljajem dlinu
ReadFile(CommHandle,Resive[0],Kols,Kols,@Ovr);//Chitajem
Commhandle//handle porta
Da vot vrodje i vsja premudrostj
MBo (2004-07-09 14:42:00) [7]например, так -
var Buf:array of byte;
SetLength(Buf,1000);
ReadFile(H,Buf[0],Size,Total,nil)