Смена драйвера в рантайм

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Гость

Сообщение Гость »

Привет!

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

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

Сообщение Гость »

Вполне.
Информация о драйвере находится в заголовке 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)
Гость

Сообщение Гость »

Привет!

Т.е. Если я правильно понял, для 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)
Гость

Сообщение Гость »

Если NewPoint и DrvPoint у тебя обьявлены как &LONG, то - да, достаточно.

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

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