Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


L-783, Delphi, copymemory

Вы не вошли.

 Поиск | Регистрация | Вход 

svale
06.06.2006 07:58:45
#1

Гость

L-783, Delphi, copymemory

Плата L-783 + Delphi-7.
Пытаюсь читать данные половинками буфера, как в примере на Си. Проблема с копированием половинки буфера. Строка:
copymemory(Dest,@data[halfbuffer*fl1],halfbuffer*sizeof(USHORT)); Постоянно вылетает с ошибкой типа "несоответствие диапазона".
Делаю так:
Задаю 2 массива - полный буф. и половинку буф.
SetLength(Dest,halfbuffer*2);
SetLength(Dest1,halfbuffer);
Вычитываю data целиком - проходит
copymemory(Dest,data,2*halfbuffer*sizeof(USHORT));
И уже из Dest вырезаю нужную половину.
copymemory(Dest1,@dest[halfbuffer*fl1],halfbuffer*sizeof(USHORT));

Как правильно копировать половинками буффера?

zardoz
06.06.2006 10:50:05
#2

Гость

Re: L-783, Delphi, copymemory

SetLength выделяет размер в байтах, а отсчеты занимают по 2 байта. В Copymemory вы поставили sizeof(USHORT), а при выделении забыли. smile

С уважением.

zardoz
06.06.2006 11:05:16
#3

Гость

Re: L-783, Delphi, copymemory

Извиняюсь, если Dest и Dest1 состоит из 2-хбайтовых элементов то все верно. Но лучше использовать знаковый тип SmallInt. Не совсем понятно что за величина @data[halfbuffer*fl1]. Дело наверное в ней.. Data это уже есть адрес.

С уважением.

DKorolkov
06.06.2006 14:23:28
#4

Гость

Re: L-783, Delphi, copymemory

> copymemory(Dest,@data[halfbuffer*fl1],halfbuffer*sizeof(USHORT)); Постоянно вылетает с ошибкой типа "несоответствие диапазона".

А какие значения принимает fl1? По логике должно быть 0 и 1. Может там что-то другое?

svale
07.06.2006 10:52:28
#5

Гость

Re: L-783, Delphi, copymemory

Dest и Dest1 того же типа, что и Data. Но по-любому увеличение их длины ничего не дает.
fl1-только 0 или 1 (все как в Сишном примере).
@data[halfbuffer*fl1] - указатель на первую или вторую половинку буфера.
А как выделяется память под Data? от чего зависит?