Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.07;
Скачать: CL | DM;

Вниз

Как присваивать PChar у нетипизированные значения?   Найти похожие ветки 

 
Aleksandr ©   (2003-06-25 12:52) [0]

Мне пришлось сделать что-то вроде надстройки над TFileStream - TSectionFile. То есть файл, данные из которого извлекаются по обращению к названии секции. Структура простая - сначала в файле лежит список объектов (название секции, время последней записи в нее, офсет на данные этой секции), а затем уже непосредственно данные. А сейчас понадобилось, чтобы сами элементы списка объектов содержали в себе данные, относящиеся к текущей секции. Вроде все просто:
добавил поле Data : PChar, при загрузке файла соответственно:

FFile.Seek(FSections.Sections[i].Offset,soFromBeginning);
aSize:=FSections.Sections[i+1].Offset-FSections.Sections[i].Offset;
GetMem(FSections.Sections[i].Data,aSize);
FFile.Read(FSections.Sections[i].Data^,aSize);

Но вот мне, соответственно, надо сделать и методы, соответствующие TFileStream.Write(const buffer; Count : integer) и TFileStream.Read(var Buffer; Count : integer) (уже выглядящие как SectionRead(const Section : string; const Buffer...), SectionWrite(const Section : string; var Buffer...).
Ну вот и не знаю я, как присваивать в Data и возврашать из нее эти нетипизированные Buffer. Объясните мне, пожалуйста.


 
Smithson ©   (2003-06-25 12:57) [1]

В процедуре параметр, объявленный как var Buffer можно использовать так:


var p: Pointer;
AA: Array[0..1000] of Integer absolute Buffer; // А здесь можно как массив.
Begin
p := @Buffer; // Имеешь адрес
AA[10] := 13;


И наконец. Процедуры чтения (и записи) данных из файла в Delphi так же часто принимают именно нетипизированный параметр. Так что ничего с ним не делай, просто передавай.


 
Aleksandr ©   (2003-06-25 13:13) [2]

Да вот хрен-то он дает так делать...

если пытаешься сделать такое:

Buffer:=FSections.Sections[i].Data

FSections.Sections[i].Data:=Buffer, то посылают до несовместимых типов.


 
Smithson ©   (2003-06-25 13:59) [3]

Правильно.
Data - это PChar, если я не ошибаюсь. Что такое PChar?
Я же писал: @Buffer; // Имеешь адрес
Дальше думай сам.


 
Aleksandr ©   (2003-06-25 15:04) [4]

Все равно не понимаю... :( Ну, сделал я на запись вот так:


Index:=FSections.SectionIndex(Section);
if Index<0 then begin
S:=TRiSection.Create(Section,DataSize);
FSections.Add(S)
end
else
S:=FSections.Sections[Index];
if Assigned(S.Data) then
FreeMem(S.Data);
P:=@Buffer;
GetMem(S.Data,Count);
S.Data:=P;


А на чтение как?



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

Текущий архив: 2003.07.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
8-20170
Intell
2003-03-08 19:03
2003.07.07
Как сделать Осцилоскоп, как в Winamp`е?


11-20020
tamerlan311
2002-10-27 16:31
2003.07.07
рабочая область экрана


4-20363
atruhin
2003-05-05 12:51
2003.07.07
Service NT помогите! Срочно! Пожалуйста!


7-20323
fishca
2003-04-25 11:19
2003.07.07
OLE Automation


1-20162
Oleon
2003-06-25 12:26
2003.07.07
Здраствуйте. Как отчет из FastReport записать в Excel. Спасибо.