Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2010, 11:35   #1
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
Стрелка странный массив или почему не работает

добрый день, товарищи программисты.
привожу кусок кода, который отказывается работать, почему не знаю...
Код:
 
var  B, FByte :array of byte;

begin
AvaibleBytes:=8;
                 setlength(B,AvaibleBytes);
                 setlength(FByte,AvaibleBytes);
                   If ReadFile(FHandle, B,AvaibleBytes , RealRead, @ReadOL) then
                    begin
                    {сохраняем параметры вызова события}
                     for i:=0 to  AvaibleBytes do
                       FByte[i]   := B[i];
как только идёт сохранение в массив Fbyte вылетает ошибка. RealRead=8
что делаю не так?

Последний раз редактировалось Stilet; 28.12.2010 в 13:51.
yuta_86 вне форума Ответить с цитированием
Старый 28.12.2010, 11:37   #2
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Код:
for i := 0 to length(FByte) - 1 do
_Engine_ вне форума Ответить с цитированием
Старый 28.12.2010, 11:45   #3
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

думаю это не важно.

скорее всего ошибка в
ReadFile(FHandle, B,AvaibleBytes , RealRead, @ReadOL)

потому что после этой строки в В в watch ничего не вижу а до этого(setlength(B,AvaibleBytes)) после инициализации были нули
yuta_86 вне форума Ответить с цитированием
Старый 28.12.2010, 13:06   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

найдено в справке
Код:
BOOL ReadFile(

    HANDLE hFile,	// handle of file to read 
    LPVOID lpBuffer,	// address of buffer that receives data  
    DWORD nNumberOfBytesToRead,	// number of bytes to read 
    LPDWORD lpNumberOfBytesRead,	// address of number of bytes read 
    LPOVERLAPPED lpOverlapped 	// address of structure for data 
   );
сравни ReadFile(FHandle, B,AvaibleBytes , RealRead, @ReadOL)

Цитата:
думаю это не важно.
будет важно когда до этого дойдет.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.12.2010 в 13:11.
evg_m вне форума Ответить с цитированием
Старый 28.12.2010, 13:42   #5
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Адрес переменной массива <> адресу данных массива.

Учить мат-часть.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 28.12.2010, 13:54   #6
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Адрес переменной массива <> адресу данных массива.

Учить мат-часть.
нет тут всё верно
yuta_86 вне форума Ответить с цитированием
Старый 28.12.2010, 15:17   #7
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Цитата:
Цитата:
Сообщение от GunSmoker Посмотреть сообщение
Адрес переменной массива <> адресу данных массива.

Учить мат-часть.
нет тут всё верно
если "тут все верно", то почему
Цитата:
потому что после этой строки в В в watch ничего не вижу а до этого(setlength(B,AvaibleBytes)) после инициализации были нули
"практика - критерий истины"
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 28.12.2010 в 15:23.
evg_m вне форума Ответить с цитированием
Старый 28.12.2010, 15:22   #8
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

почему в COM порт записываю 10 байт и сразу же их считываю.
но они приходит не сразу 10, а сначала 8 и потом 2. можно ли сразу считать всё что пришло ?
yuta_86 вне форума Ответить с цитированием
Старый 01.01.2011, 07:49   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var  B, FByte :array of byte;

begin
AvaibleBytes:=8;
                 setlength(B,AvaibleBytes);
                 setlength(FByte,AvaibleBytes);
                   If ReadFile(FHandle, @B[0],AvaibleBytes , RealRead, @ReadOL) then//нам нужен не сам массив а его данные
                    begin
                    {сохраняем параметры вызова события}
                     for i:=0 to  AvaibleBytes-1 do//иначе вылет за границы массива
                       FByte[i]   := B[i];
Цитата:
почему в COM порт записываю 10 байт и сразу же их считываю.
но они приходит не сразу 10, а сначала 8 и потом 2. можно ли сразу считать всё что пришло ?
ну как бы данные пакетами идут, или вы думаете просто так протоколы стали придумывать?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.01.2011, 19:05   #10
yuta_86
Пользователь
 
Регистрация: 06.12.2010
Сообщений: 99
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну как бы данные пакетами идут, или вы думаете просто так протоколы стали придумывать?
нет я ничего такого не думал. как же теперь быть? считывать постепенно записи с приёмного буфера?или есть другой выход?
yuta_86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему интеренет на Xp не работает, а на семерке работает Lenura Windows 18 04.10.2010 12:04
почему не работает BrYan91 Помощь студентам 0 22.06.2010 22:58
Почему не работает тег align=right?valign работает а align нет! aviv HTML и CSS 5 21.01.2009 17:46