Форум: "Начинающим";
Текущий архив: 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.007 c