Перейти до змісту

Delphi -йщики ! HELP!


Banzai

Рекомендовані повідомлення

Опубліковано

есть любопытная прога с сорсами на делфях ... возникло желание конвертонуть либо накрайняк реализовать идею на сишарпе под НЕТом ...

застопорился на структуре packed record и ее описании в разделе имплементаций... выглядит ето чудо так -

unit scan;

Interface

uses windows,classes;

type

pdescriptor=^descriptor;

descriptor=packed record {file descriptor}

next: pdescriptor;

nf: integer;

case integer of

0:(bytes: int64);

1:(nc: integer; sub: pdescriptor; mark: boolean; name: string[255]);

end;

tscanthread=class(tthread)

d,no: integer;

scanned,usedspace: int64;

tree, recycled: pdescriptor;

done: boolean;

constructor create(drive: integer);

procedure execute; override;

procedure checkstate1;

end;

var

norec: pdescriptor;

implementation

,,,,,

особенно интригует ето -

pdescriptor=^descriptor;

descriptor=packed record {file descriptor}

next: pdescriptor;

nf: integer;

case integer of

0:(bytes: int64);

1:(nc: integer; sub: pdescriptor; mark: boolean; name: string[255]);

end;

-- насколько я понимаю pdescriptor - есть указатель на необъявленную переменную descriptor ....

descriptor=packed record - не финализорована ЕНДом .... (фигурные скобки - ето коммент)

case integer of - вообще мя выбил .... во первых интежер - етож базовый тип а не переменная ...???? - во вторых что собственно там будет выбираться??? - ведь в записи не обявлена такая переменная ...

кроме всего сильно путают ети рекурсивные обращения и декларации ....

в сумме в ету структуру должно записываться размер и имена каталогов и файлов при рекурсивном сканировании логического диска...

если нуна запощу прогу и сорсы

хелп ... я полагаю ето интересно для програмеров :D:D

Опубліковано

на сам "paked" можеш забити болт - це просто для економії пам'яті. а от з поперднім об'явленням типу в шарпі я не знаю що робити по причині незнайомства з шарпом.

далі, логіка така: якщо в тебе pdescriptor.nf=0 то добавляється поле bytes, якщо 1 - то поля nc: integer; sub: pdescriptor; mark: boolean; name: string[255]. end закриває опис структури. такий case дозволяється робити в кінці опису структури і він має бути єдиний для даного опису.

Опубліковано

ГРЭАТ СЭНКС! пойду думать как ето перевести на шарп ... синтаксис в нем весьма близок и паскалю и си но вот с описанием объектов и контролем типов в нем все намного строже... хм...

однако хитро придумано...

Опубліковано
RSDN.ru допоможе

Там програмери тусуються!

;) щось в мене воно не відкривається, зроби лінком, плз.

  • 2 тижня потому...
Опубліковано
на сам "paked" можеш забити болт - це просто для економії пам'яті. а от з поперднім об'явленням типу в шарпі я не знаю що робити по причині незнайомства з шарпом.

далі, логіка така: якщо в тебе pdescriptor.nf=0 то добавляється поле bytes, якщо 1 - то поля nc: integer; sub: pdescriptor; mark: boolean; name: string[255]. end закриває опис структури. такий case дозволяється робити в кінці опису структури і він має бути єдиний для даного опису.

хай ! еще вопросик... опиши плиз логику исполнения

pdescriptor=^descriptor;

descriptor=packed record

x:pdescriptor;

,,,

end

в плане того что есть ета запись и что есть pdescriptor? - как ето будет выглядеть в виде екземпляров структуры? короче плиз логику работы... ато я реально недогоняю...

pdescriptor вроде как ето неинициализированная переменная типа descriptor да? или тоже тип? ... хм... нерублю в делфях - караул...

Опубліковано

хм ... тоесть что получается? - что прога работает с переменной-записью которая все одна ? и только рекурсивно дописывает в нее новые поля?

микс! ты каданить щупал си шарп? - как ето перевести на него ? я голову сламал :ok2:

рекорды в делфях ето подобие класов и инициализацыей и екземплярами или нет?

Опубліковано

ну не обязательно си шарп ... хотьбы си нетовый или простой...

да хоть бы на словах - как ето работает? какая логика?

Опубліковано
pdescriptor - указатель на переменную descriptor

я запамятовал ... ето в разделе type

...

ну ... указатель и ладно .. только под нэтом ето будет ансэйф код ... типа изза того что среда исполнения сама занимается сборкой мусора .. и может просто похерить область памяти в которой находится объект нашего указателя ... можно конечно выкрутится ... но дело не в етом ..

мне кажется что я ужо нащупал смысл ... он гдета рядом :)

собственно что хотим получить? - кучу либо стек, объектов либо записей-структур представляющих собой узлы (дескрипторы папок) и как часный случай листья - дескрипторы файлов ...

беда в том что в шарпе нельзя структуру финализировать кэйзом или аналогом его ...

- можно замутить две структуры с динамическим выбором правильной в процессе сканирования дерева каталогов ...

не совсем понятно что есть переменные-указатели на дочерние субкаталоги ... вроде там поле то ксего одно а субкаталогов может быть немеряно.... ?

сорсы - смотреть пост №1

хм... внимательно повтыкал на сорс и вроде понял в чем прикол ... :)

Опубліковано

type

pdescriptor=^descriptor;

descriptor=packed record

var

x:pdescriptor;

воно десь так має бути...

pdescriptor - тип вказівника на тип descriptor. тип вказівника може описуватись раніше, ніж тип на який вказує pdescriptor.

Заархівовано

Ця тема знаходиться в архіві та закрита для подальших відповідей.



×
×
  • Створити...