Страница 1 из 1

Добавлено: 01 Октябрь 2004, 10:13
Гость
Привет!

Надо при старте проги определить доступность сервера и, если недоступен, сменить драйвер у пачки файлов. Доступность сервера не проблема, а вот драйвер... Это возможно?

Александр Агеев (aageev@satren.ru)
Написал: ClaList(2)

Добавлено: 01 Октябрь 2004, 10:21
Гость
Вполне.
Информация о драйвере находится в заголовке FILE-структуры.
Точнее - адрес точки входа в главную процедуру драйвера.

Для версий до C6.0 - первый LONG в заголовке (смещение +00).
Для C6.x - второй LONG в заголовке (смещение +04).

Проще всего достать адрес нового драйвера прямо из заголовка другого файла, заранее обьявленного с нужным драйвером. И, естественно, надежнее всего - прямо в том потоке, где будет использоваться файл.

В любом случае, рекомендую перед сменой драйвера выполнить оператор DESTROY. Правда, в последней версии C61 разработчики опять его "спрятали" внутрь RTL, но имя осталось прежним Cla$FILE_DESTROY.
В C5x для этого следует использовать Cla$deactivate_drv.
Впрочем, эта функция является универсальной - работает и в C6.x

Удачи!

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru
Написал: ClaList(2)

Добавлено: 01 Октябрь 2004, 10:22
Гость
Привет!

Т.е. Если я правильно понял, для 5.5 это будет так:
1. объявляем один файл заранее с нужным драйвером
2. Прописываем Cla$deactivate_drv в Мап как
Deact(FILE),Name('Cla$deactivate_drv') (а параметры?)
3. через Long DrvPoint &= (Address(FileLabelWithNewDriver)) получаем в
DrvPoint нужное значение
4. Для каждого файла делаем
Deact(oldFile)
Long NewPoint &= (Address(oldFile))
NewPoint = DrvPoint

B всё? Этого точно хватит? Драйвер в файле потом проактивируется сам?

Александр Агеев (aageev@satren.ru)
Написал: ClaList(2)

Добавлено: 04 Октябрь 2004, 11:06
Гость
Если NewPoint и DrvPoint у тебя обьявлены как &LONG, то - да, достаточно.

При первом-же обращении к файлу с новым драйвером драйвер сам проинициализирует все внутренние структуры, необходимые для работы с этим файлом.

=============================
С уважением, Олег А. Руденко.
Oleg_Rudenko@mail.ru
Oleg_Rudenko@mail333.com
Библиотека DynaLib
http://dynalib.narod.ru
Написал: ClaList(2)