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

Вниз

TMemoryStream. Адресное пространство TMemoryStream.Memory   Найти похожие ветки 

 
ych_boriss   (2003-02-20 15:25) [0]

Как узнать адрес указателя, на участок памяти TMemoryStream.Memory с любым смещением
спабибо


 
Anatoly Podgoretsky   (2003-02-20 15:29) [1]

Что значит узнать?


 
ych_boriss   (2003-02-20 15:50) [2]

Надо получить такой адрес:
var
P : Pointer;
...
begin
...
P := MemStream.Memory;
// P := смещение на X байт от P;
// в этом случае мне нужен адрес P
...
end;


 
Владислав   (2003-02-20 15:55) [3]

После этого:
P := MemStream.Memory;
P есть адрес указателя на участок памяти TMemoryStream.Memory
Объясни, что ты хочешь?


 
ych_boriss   (2003-02-20 16:05) [4]

нарисую:

[MemoryMap]:

P := TMemoryStream.Memory; // всегда указывает на начало (см рис)
P1 := TMemoryStream.Seek(X, soFromBeginning); //
// мне нужен адрес P1 относительно P
=======================================================
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ... XX ...
^ . . . . . . . . . . . . . . . ... ^ ...
P P1


 
Anatoly Podgoretsky   (2003-02-20 16:07) [5]

ych_boriss (20.02.03 15:50)
Еще раз и поподробнее.


 
ych_boriss   (2003-02-20 16:16) [6]

В TMemoryStream.Memory, начиная с первого байта, последовательно, один за другим, расположены записи (record"ы):

type
TRec = record
ID : Word;
DataSize : Word;
Data : array of Byte;
end;
---
RECORD_01 : TRec;
RECORD_02 : TRec;
RECORD_03 : TRec;
...
RECORD_XX : TRec;
...
RECORD_N : TRec;
---
записи могут иметь разный размер.
адрес первой записи мне всегда известен, он совпадает с TMemoryStream.Memory, поскольку оно - Pointer.

Как мне найти адреса записей, начиная со 2-го?


 
Anatoly Podgoretsky   (2003-02-20 16:28) [7]

ych_boriss (20.02.03 16:05)
Тебе нужен адрес + 12, ну так и сложи их

ych_boriss (20.02.03 16:16)
То же самое, проход по структуре. Насколько я понимаю DataSize : Word это размер чего то, но у тебя все записи фиксированной длины 8 байт, тут на выручку еще можно призвать кроме сложения и умножение.

ЗЫ: счет записей ведется с 0, не спутай с единицей!


 
Digitman   (2003-02-20 16:31) [8]

type
TRecArray = array[0..0] of TRec;
PRecArray = ^TRecArray;

...

i := 5; // 6-я запись

PRecArray(MemStream.Memory)[i] := ...


 
ych_boriss   (2003-02-20 16:45) [9]

Спасибо ОГРОМНОЕ за помощь, но я это реализовал вот-так (ессно, с Вашей помощью):

...
P := TMemoryStream.Memory;
repeat
PRec := P; // PRec : ^TRecType
RecSize := SizeOf(TRecType); // предопределенный тип
AList.Add(PRec); // AList : TList;
P := Pointer(Longint(P) + RecSize);
until Condition;


 
Владислав   (2003-02-20 16:50) [10]

Вот это ни к чему:
RecSize := SizeOf(TRecType); // предопределенный тип



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

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

Наверх





Память: 0.57 MB
Время: 0.039 c
7-5900
Kotka
2002-12-29 01:02
2003.03.03
Перехват подсказок


7-5880
And00
2003-01-04 11:41
2003.03.03
Метка диска


14-5747
jen_bond
2003-02-16 10:20
2003.03.03
Автозапуск для cd-rom.


14-5859
Толян
2003-02-14 11:42
2003.03.03
Cristal Reports, где можно скачать?


4-5906
Blacki
2003-01-05 23:25
2003.03.03
Как узнать иконку ассоциированную определённому расширению





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