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

Вниз

Считывание BlockRead`ом в вариантный массив   Найти похожие ветки 

 
K   (2008-04-23 12:28) [0]

Такое возможно? Программа вылетает на втором BlockRead:


type TEtkData = record ES,SF,NE,NV,KX : Integer; DE,DV,X0,Y0,ROT : real; ZBASE,ZMult : real; end;

var F : file;
   etkData : TEtkData; buf : variant;
   BufSize : integer;

begin
 AssignFile(F,Filename); reset(F,1);

 BlockRead(F,etkData,76,code);

 BufSize := etkData.NE*etkData.NV;

 case etkData.SF of
 0 : buf := VarArrayCreate([0,BufSize-1], varByte);
 1 : buf := VarArrayCreate([0,BufSize-1], varWord);
 3 : buf := VarArrayCreate([0,BufSize-1], varInteger);
 4 : buf := VarArrayCreate([0,BufSize-1], varSingle);
 end;

 BlockRead(F,buf,etkData.ES*BufSize,code);
 
 CloseFile(F);
 ...
end;


Посоветуйте, плз...


 
Palladin ©   (2008-04-23 12:34) [1]

VarArrayLock + F1


 
ZENsan ©   (2008-04-23 16:31) [2]

Используй packed record....


 
ZENsan ©   (2008-04-23 16:33) [3]

Hotja eto mozhet i ne pomoch... tut vpravdu nado VarArrayLock..


 
Alarm ©   (2008-04-23 16:37) [4]

По мне, так BlockRead-у все равно куда считывать, не вижу проблем, хотя не проверял


 
Palladin ©   (2008-04-23 17:04) [5]


> Alarm ©   (23.04.08 16:37) [4]

подрастешь увидишь


 
Palladin ©   (2008-04-23 17:35) [6]

Удалено модератором
Примечание: дубль


 
Ёжик   (2008-04-23 17:40) [7]

> Palladin ©   (23.04.08 17:04) [5]
> Palladin ©   (23.04.08 17:35) [6]
Почти полчаса...
Опять похоже не допил:(


 
K   (2008-04-24 10:26) [8]

Сделала так:

type TEtkData = record ES,SF,NE,NV,KX : Integer; DE,DV,X0,Y0,ROT : real; ZBASE,ZMult : real; end;
    TDataArray = array of byte; PDataArray = ^TDataArray;

var F : file;
  etkData : TEtkData; buf : variant; bufByte : PDataArray;
  BufSize : integer;

begin
AssignFile(F,Filename); reset(F,1);

BlockRead(F,etkData,76,code);

BufSize := etkData.NE*etkData.NV;

case etkData.SF of
0 : buf := VarArrayCreate([0,BufSize-1], varByte);
1 : buf := VarArrayCreate([0,BufSize-1], varWord);
3 : buf := VarArrayCreate([0,BufSize-1], varInteger);
4 : buf := VarArrayCreate([0,BufSize-1], varSingle);
end;

New(BufByte); SetLength(BufByte^,BufSize*etkData.ES);
try
  BufByte := VarArrayLock(buf);
  BlockRead(F,buf,etkData.ES*BufSize,code);
  ...
finally
 VarArrayLock(buf);
end;

Dispose(BufByte);  
CloseFile(F);
end;

На втором BlockRead`е выдает ошибку: типа "массив заперт"


 
K   (2008-04-24 10:28) [9]

Сорри, конечно же, так:
type TEtkData = record ES,SF,NE,NV,KX : Integer; DE,DV,X0,Y0,ROT : real; ZBASE,ZMult : real; end;
   TDataArray = array of byte; PDataArray = ^TDataArray;

var F : file;
 etkData : TEtkData; buf : variant; bufByte : PDataArray;
 BufSize : integer;

begin
AssignFile(F,Filename); reset(F,1);

BlockRead(F,etkData,76,code);

BufSize := etkData.NE*etkData.NV;

case etkData.SF of
0 : buf := VarArrayCreate([0,BufSize-1], varByte);
1 : buf := VarArrayCreate([0,BufSize-1], varWord);
3 : buf := VarArrayCreate([0,BufSize-1], varInteger);
4 : buf := VarArrayCreate([0,BufSize-1], varSingle);
end;

New(BufByte); SetLength(BufByte^,BufSize*etkData.ES);
try
 BufByte := VarArrayLock(buf);
 BlockRead(F,bufbyte^[0],etkData.ES*BufSize,code);
 ...
finally
VarArrayLock(buf);
end;

Dispose(BufByte);  
CloseFile(F);
end;


 
han_malign ©   (2008-04-24 10:35) [10]

Lock/Unlock

> New(BufByte); SetLength(BufByte^,BufSize*etkData.ES);
- а вот нахрена выделять два буфера, ссылку на которые потом теряешь???

Темна вода в облацех...


 
icWasya ©   (2008-04-24 10:36) [11]

//New(BufByte); SetLength(BufByte^,BufSize*etkData.ES); Выкинуть
try
BufByte := VarArrayLock(buf);
BlockRead(F,bufbyte^[0],etkData.ES*BufSize,code);
...
finally
 VarArrayUnLock(buf);
end;

//Dispose(BufByte);   и это выкинуть
CloseFile(F);
end;


 
K   (2008-04-24 11:18) [12]

finally
VarArrayUnLock(buf);
end;

Так и есть в программе, я неправильно написала в посте. Все равно вылетает


 
Сергей М. ©   (2008-04-24 12:53) [13]


> K   (24.04.08 11:18) [12]


Нафих тебе этот вариантный массив сдался - ума не приложить)

Чем плох тот же GetMem ?


 
han_malign ©   (2008-04-24 13:41) [14]


> Все равно вылетает

- птому и вылетает, что пытаешься внутренний буфер варианта убить...
поэтому смотри:  
> icWasya ©   (24.04.08 10:36) [11]
> //Dispose(BufByte);   и это выкинуть


 
Palladin ©   (2008-04-24 13:43) [15]


> Ёжик   (23.04.08 17:40) [7]

причем тут недопил, у меня в IE кукисы сломались, отвечал на вопрос в Основной, спросили пароль на авторизацию из страницы из кеша прокси, соответсвенно и пост взялся из прокси и продублировался


 
Ёжик   (2008-04-24 13:48) [16]

>Palladin ©   (24.04.08 13:43) [15]
Меня смутила разница во времени (полчаса) двух одинаковых постов. Прошу извинить, если был не прав.



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

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

Наверх





Память: 0.48 MB
Время: 0.008 c
2-1209129661
маша
2008-04-25 17:21
2008.05.25
Сохранить результат FastReport отчета в fr3


2-1209661719
graphoman
2008-05-01 21:08
2008.05.25
Bitmap


2-1209578537
pro
2008-04-30 22:02
2008.05.25
Разъясните решение!


2-1208970958
dik
2008-04-23 21:15
2008.05.25
Редактирование рисунков кнопок


2-1208955685
Кирей
2008-04-23 17:01
2008.05.25
не срабатывает простой запрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский