Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
ВнизЧтение строки из файла Найти похожие ветки
← →
ma5ter © (2006-01-29 15:22) [0]Что-то не получается прочитать из бинарника строку по определенному адресу. Кажется я что-то делаю не так ...
type
mTYPE=(mCHAR, mINT, mINT2, mDOUBLE, mFLOAT, mTEXT);
MyConponent=class(TComponent)
private
FImaFile:TMemoryStream;
FFile_Size:integer;
Manufacturer:string;
Function MyComponent.bin2text (input_type:mTYPE; counter:byte; adress:cardinal):string;
published
procedure LoadFromStream(Stream:TStream);
end;
procedure Register;
implementation
constructor MyComponent.Create(aowner:Tcomponent);
begin
inherited create(Aowner);
FImaFile:=TMemoryStream.Create;
end;
destructor MyComponent.Destroy;
begin
FImaFile.Free;
end;
Function MyComponent.bin2text (input_type:mTYPE; counter:byte; adress:cardinal):string;
var s:string;
begin
case input_type of
SUN_CHAR:
begin
GetMem(pS,255);
adr:=Cardinal(pS);
FImaFile.Position:=adress;
FImaFile.Read(pS^,counter);
s:=pS^;//вот здесь ошибка Access violation at address ...
freemem(pS);
end;
result:=s;
end;
Procedure MyComponent.LoadFromStream(Stream:TStream);
begin
FImaFile.LoadFromStream(stream);
FImaFile.Position:=0;
FFile_Size:=FImaFile.Size;
Manufacturer:=bin2text(mCHAR, 9, $60);
end;
← →
Eraser © (2006-01-29 15:34) [1]
> ma5ter © (29.01.06 15:22)
А TFileStream не пробовал использовать?
← →
ma5ter © (2006-01-29 15:35) [2]а какая разница то?
← →
Fay © (2006-01-29 15:36) [3]Где тут строки?
Где здесь файлы?
Что это за фигня (уверен, это даже не компилируется) вАщЕ?
P.S.
SetString тебе в помощь
← →
ma5ter © (2006-01-29 15:40) [4]Тут другой случай. Я через TFileStream открываю файл и передаю в потоке в стандартную процедуру. Но не в этом дело однозначано. Если добавить:
for i:=0 to counter-1 do
begin
pC:=ptr(adr+cardinal(i));
s:=s+pC^;
end;
вместоs:=pS^;//вот здесь ошибка Access violation at address ...
все работает. Почему не работает первый вариант?
← →
ma5ter © (2006-01-29 15:44) [5]2Fay: Это не должно компилироваться, т.к. это пример кода. Кучи кода не относящейся к делу не представлено. А проблемка в предпоследней строке
Manufacturer:=bin2text(mCHAR, 9, $60);
, где идет чтение строки 9 символов (mCHAR) из файла находящемся в TMemoryStream по адресу $60.
← →
ma5ter © (2006-01-29 15:46) [6]да pC это ^char
← →
ma5ter © (2006-01-29 15:48) [7]pS:^string
← →
Eraser © (2006-01-29 15:49) [8]
> ma5ter © (29.01.06 15:44) [5]
Сначала давай реальный код - потом будут советы, то что ты тут выложил - не код, а набор символов, в котором абсолютно нет желания разбираться.
> pS:^string
ужос.
← →
Fay © (2006-01-29 16:12) [9]s:= pS^ будет ползти до первого #0, и не факт, что он найдется в пределах выделенной памяти.
> pS : ^String
Действительно, ужос (с) Eraser
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.011 c