Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» ODAC: TOraSQL (...> BCB6 & translation manager)

Автор: royt
Дата сообщения: 25.05.2006 15:26
Кинул на форму компонент типа TOraSQL.
В run-time при обращении к нему вываливается access violation. Выясняется, что указатель (юзаю BCB) на экземпляр данного компонента равен NULL - т.е. почему-то он не создается. Добавляю код и "вручную" создаю экземпляр - тогда создается и всё фурычит...
Вопрос: где собака порылась?

Использую C++ Builder 6.0 (+update 4), ODAC 5.70.0.31.
Автор: MrZeRo
Дата сообщения: 25.05.2006 17:07
royt
Смотря в какой момент обращаешься. Фрагмент кода покажи.
Автор: royt
Дата сообщения: 06.06.2006 08:02
разобрался...

В общем при использовании Translation Manager последний при создании .dll-ки для переводимого языка делает копии .dfm-файлов всего проекта. Когда эта .dll-ка используется и подгружается - все значения свойств (properties) и обработчиков событий (events) форм и компонентов, прописанные в "копиях" .dfm, переопределяют те, что находятся в самом .exe-файле.

Так вот, если после изменения каких-либо значений properties или events не были обновлены ресурсы "переводной" .dll-ки (не был заново запущен Translation Manager, затем выполнена компиляция .dll-ки), то при загрузке приложением такой "устаревшей" .dll-ки (если к этому приводит выбор текущей локали) можем получить самые разные фокусы. Например - вешаем на какой-нибудь event свой обработчик, а после запуска приложения в упор не видим чтобы он вызывался (т.е. он именно не вызывается), хотя в силу логики работы компонента этот обработчик ну никак не может не вызываться... (собствнно, так я и набрёл на выяснение причины проблемы)

Аналогичные вещи происходят в случае, когда мы просто кинули на форму дополнительные компоненты, а в "переводной" .dll-ке форма не обновлена - тогда при запуске приложения получим, что добавленные компоненты в "старой" форме вообще не определены (!) и при использовании такой .dll-ки (когда к этому приводит текущая локаль) указатели на такие компоненты будут просто равны NULL - что и просходило в случае, описанном мною в шапке.

Всё вышеозначенное касается C++ Builder 6. На Delphi или других версиях не проверял как оно себя ведет (может там Translation Manager немного по-другому работает).


ps. По-моему этот случай можно в FAQ заносить.

pps. Интересно, в Borland Developer Studio 2006 перевод на другие языки по тем же принципам работает или нет...

Страницы: 1

Предыдущая тема: алгоритм решение системы ур-ний методом Гаусса


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.