Chunk.size
Где устанавлвивается это значение ? Какие значения для него показывает отладчик ?
Модератор: Модераторы
Chunk.size
debi12345 писал(а):Где устанавлвивается это значение ? Какие значения для него показывает отладчик ?
Read(Chunk,8);
ReverseByteOrder(@Chunk.size,4);
StartPos:=Position;
GetMem(Chunk.data,Chunk.size);
Stream.Read(Chunk.data^,Chunk.size);
if Assigned(ReadCallback) //( if Assigned(ReadCallback) - работает нормально) в смысле Assigned...
then ReadCallback(Chunk,UserData); // <== а вот здесь модуль всегда падает... если закомментировать то проходит весь stream
FreeMem(Chunk.data,Chunk.size);
Position:=StartPos+Chunk.size+(StartPos+Chunk.size) mod 2;
Никаких Dll нет.
Как мне дешифровать содержимое Data,
debi12345 писал(а):А зачем тогда понадобилось CDECL ?
debi12345 писал(а):Сперва нужно его просто получить в память - без вылета из программы
заносит данные в FData,
соответственно FDATA - можно прочитать.
для этого нужно дешифровать FData: Pointer.
А я никогда этого не делал... Вроде всё понимаю... а как это делается не знаю Знаний и опыта - не хватает
А может это быть не Dll? а какой нить код, который размещён в соседнем модуле
debi12345 писал(а):Такие вещи делаются именно в отладчике
debi12345 писал(а):Какими байтами в в этом пойнтере предствалено например число 123.45 ? Нужно ли вызывать Int(Float)ToStr Или достаточно посимвольной конкатенации ?
debi12345 писал(а):И замахнулись на нестандртные деккларации
debi12345 писал(а):CDECL - нужно для обращения к DLL, написаным на С
bormant писал(а):чтобы потом передать в вызов
Readed := LoadFromStream(Stream, @MyHandler, Memo1);
bormant писал(а):... как-то обрабатываем Chunk
Это не на форуме, это в документации по формату файла искать надо, как данные того или иного чанка интерпретировать.vitaly_l писал(а):у меня не получается получить данные в понятном мне виде
bormant писал(а):это в документации по формату файла искать надо
Да хоть как нибудь вывести бы - этот чёртов стэк...
Неужели нет никакого стандартного метода интерпретировать содержимое data : pointer из stream?
debi12345 писал(а):1) на "падающей" функции назначить точку остнова
2) как остановится - выпонять прграмму пошагово, глядя в содержимое памяти
bormant писал(а):Это не на форуме, это в документации по формату файла искать надо, как данные того или иного чанка интерпретировать.
Не нужно. Вам содержимое чанка приходит готовое, размер в Size, данные в Data^.vitaly_l писал(а):Мне нужно понять схему считывания из стэка.
1
Это фрагмент 1 из 1 строки
2
Это фрагмент 2
из 2 строк
3
Это фрагмент 3
из 3
строк
1
Это фрагмент 4 из 1 строки
// это нам дано
const
EOL = #13#10;
type
PChunkRec = ^TChunkRec;
TChunkRec = record
Size: integer;
Data: pointer;
end;
TReadCallback = procedure(Chunk: TChunkRec; Data: Pointer); cdecl;
procedure LoadFromFile(var F: text; ReadCallback: TReadCallback; UserData: Pointer);
var
Chunk: TChunkRec;
s, l: string;
i, n: integer;
begin
while not SeekEof(F) do with Chunk do begin
ReadLn(F, n); s := '';
for i := n downto 1 do begin ReadLn(F, l); s := s + l + EOL; end;
Size := Length(s) + 1; GetMem(Data, Size);
Move(s[1], Data^, Size - 1); (PChar(Data) + Size - 1)^ := #0;
if ReadCallback <> nil then ReadCallback(Chunk, UserData);
FreeMem(Data);
end;
end;
// это дописываем мы для работы LoadFromFile
procedure MyHandler(Chunk: TChunkRec; UserData: Pointer); cdecl;
begin
with Chunk do WriteLn(Size, EOL, PChar(Data));
end;
var
f: text;
begin
Assign(f, 'tst.txt'); Reset(f);
LoadFromFile(f, @MyHandler, nil);
Close(f);
end.
29
Это фрагмент 1 из 1 строки
29
Это фрагмент 2
из 2 строк
30
Это фрагмент 3
из 3
строк
29
Это фрагмент 4 из 1 строки
bormant писал(а):Надеюсь, так технология понятнее стала?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0