VY> С5ee-b VY> Неоднократно уже поднимался вопрос, VY> как зная только метку файла получить доступ к буферу записи. VY> Неоднократно давались VY> ответы, примерно так: TestProc PROCEDURE(*FILE MyFile) FileHeader GROUP DriverPtr ULONG !указатель на точку входа драйвера файла NamePtr &STRING !указатель на строку именифайла (так можно только в 32-бит) DrvInitPtr &STRING !указатель на строку инициализации драйвера (так можно только в 32-бит) PasswordPtr &STRING ! указатель на строку пароляфайла (так можно только в 32-бит) Status BYTE ! атрибуты файла KeyCount BYTE !количество ключей MemoCount BYTE !количество MEMO-полей RecordSize ULONG !размер записи (буфера записи) FieldsDefPt ULONG !адрес структуры описания полей записи файла KeysDefPtr ULONG ! адрес структуры описания ключей файла MemosDefPtr ULONG ! адрес структуры описания MEMO-полей RecordPtr &GROUP !указатель на буфер записи END
???? Это где-же ты такое нашел?
RecordPtr ULONG
Только ТАК и никак иначе!!! А как составить из этого правильный указатель на запись см. в конце письма.
А в 16 бит не только указатели на строки меняются на простые LONG, но и все размеры задаются через SHORT.
Проще сразу их прописывать как UNSIGNED.
VY> Все, FileHeader.RecordPtr и есть «указатель» на буфер записи.
VY> НУ И ЧТО? Ни WHO, ни WHERE, ни WHAT с этим «указателем»
VY> не работают !!!, а мы то для этих функций его и раскапывали.
VY> Очередной раз общаясь с Clarion чувствую себя полным идиотом.
Зачем-же так? Просто надо брать нормальные описания. И проблем не будет.
VY> Что интересно, если в C55 применить такой же подход,
VY> то тоже ничего не работает, а вот с родным PROP:Record все в норме.
Естественно! Так он использует правильное описание структуры:)
VY> А в общем опять в проекте проделано много работы
VY> в надежде на WHO/WHERE/WHAT и опять смачно граблями по лбу. Придется,
VY> вероятно, внаглую править буфер записи послав куда подальше все эти W…
Напрасно!
VY> Может я все же где то ошибся? Поправьте, плиз.
Внимательней читай почту:) Я уже несколько раз бросал правильный формат.
VY> Всего доброго!
VY> ________________________________
VY> Владимир Якимченко (ICQ 16993194)
FHdr GROUP DriverPtr ULONG FileName &STRING DrvInitStr &STRING Password &STRING Attr BYTE KeyCount BYTE MemoCount BYTE RecordSize ULONG FieldsDefPtr ULONG KeysDefPtr ULONG MemosDefPtr ULONG RecordPtr ULONG Reserved ULONG Res1 BYTE Res2 BYTE END FRecGrp GROUP FRecord &GROUP END OverGrp GROUP,OVER(FRecGrp) RecPtr ULONG RecDefPtr ULONG RecSize ULONG END FGrp GROUP FRef &FILE END FPtr ULONG,OVER(FGrp) Code FGrp.FRef &= MyFile Peek(FPtr,FHdr) OverGrp.RecPtr = FHdr.RecordPtr OverGrp.RecDefPtr = FHdr.FieldsDefPtr OverGrp.RecSize = FHdr.RecordSize
Все! FRecGrp.FRecord — полноценный указатель на запись файла, с которым прекрасно работают все функции и процедуры.
P.S. На Клариоше лежит моя библиотека DynaView. В числе прочих, там есть несколько таких служебных функций для работы с файлами и ключами. Их можно использовать и без создания самой View.
P.P.S. А вообще-то, это уже становиться почти FAQ-овым вопросом.