Главная страница
    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.45 MB
Время: 0.006 c
14-20298
Alexsus
2003-06-20 12:37
2003.07.07
Подскажите пожалуйста, где можно взять какой-нибудь ...


3-19995
nv-vetal
2003-06-13 11:12
2003.07.07
Delphi & MySQL. Ошибка при соединении - unable to load libmysql.d


1-20058
Brain Force
2003-06-25 17:52
2003.07.07
Народ, помогите с QuickRep-ом


14-20276
Omar2002
2003-06-03 17:04
2003.07.07
Сессия


14-20201
Феликс
2003-06-17 17:53
2003.07.07
22 июня. Льюис VS Кличко.





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