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-овым вопросом.
