Главная страница
    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.007 c
7-20316
kull
2003-04-23 16:41
2003.07.07
Как узнать путь к com серверу?


11-20022
Delphi_n
2002-10-30 07:36
2003.07.07
<b>Chart в KOL</b>


1-20079
Mad Admin
2003-06-24 11:32
2003.07.07
Использование скинов ХР


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


14-20310
frack
2003-06-21 09:42
2003.07.07
Работа с TreeView





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