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

Вниз

Как присваивать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.006 c
14-20230
Vorobyev Sergey
2003-06-19 13:59
2003.07.07
Oracle at Delphi :-))))))


1-20160
allvin
2003-06-25 11:25
2003.07.07
Классы


14-20272
race1
2003-06-18 15:54
2003.07.07
lan


3-19993
AkaSaint
2003-06-11 00:40
2003.07.07
Не могу создать Lookup-поле без DataSet


8-20176
Blacki
2003-03-22 08:39
2003.07.07
Рисование примитивов





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