Главная страница
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.021 c
11-20027
Alexander
2002-10-31 13:55
2003.07.07
Вопрос по KOLLabel: у меня она лежит на панели с выравниванием


1-20072
hex_for_delphi
2003-06-24 00:37
2003.07.07
как загружать из внешнего файла в масив и обратно.


8-20167
altarasjuk
2003-03-21 21:15
2003.07.07
Canvas dose not allow drawing.


3-19973
M126
2003-06-12 17:00
2003.07.07
Как сделать вычисления в edit?


7-20326
Лёша
2003-04-25 16:36
2003.07.07
Кто знает, почему при выгрузке ДИНАМИЧЕСКОГО МОССИВА в COM port,