Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизCannot create application object in shared object or library Найти похожие ветки
← →
dmitry81_2 (2005-03-01 14:32) [0]Добрый день, мастера! Было разработано приложение с использованием vcl, взаимодействующее с СУБД. Далее, приложение было разбито на пару exe и dll, таким образом, что весь функионал оказался в динамически загружаемой библиотеке, а исполняемое приложение лишь вызыало библиотеку неявным образом. В библиотеке, кроме всего прочего, описывались формы, и, следоватлеьно, использовался модуль Forms. При загрузки библиотеки значению Handle объекта Application присваивалось аналогичное значение объекта из исполняемого приложения, при выгрузке - восстанавливалось. Эта пара работала без ошибок.
Далее возникла необходимость перепесать приложение таким образом, что бы вместо vcl приложение использовало clx. Был опять составлено единое приложение, оно было переработано нужным образом и отлажено. Проблем с ним также не было.
Но! При разбиении приложения на пару exe/dll возникли проблемы: при вызове функции LoadLibrary() выдавалась следующая ошибка: Fatal Error: Cannot create application object in shared object or library.
Что делать - не понятно. Удаление ссылок из исполняемого приложения на QForms возможно, но не дает никакого результата. Удалить ссылки на QForms из библиотеки невозможно в принципе, т.к. (как писалось выше) в ней описываются формы.
Подскажите, пожалуйста, с чем сязана эта ошибка и как ее ликвидировать.
← →
Digitman © (2005-03-01 14:37) [1]
> как ее ликвидировать
встроенный отладчик-то - всегда под рукой ..
мысленка-то гадостная не посещала ли ? оттрассировать clx-приложение пошагово ?
← →
dmitry81_2 (2005-03-01 14:51) [2]Посещала. Но резульатов от такой отладки - ноль.
Вызов библиотеки происходит следующим образом:
1. из приложения вызывается LoadLibrary
2. в библиотеке выполняется код между begin и end в главном модуле (где описываются экспортируемые функции), т.е. код который предназначен для инициализации различных переменных в библиотеке, управлением процесса ее загрузки, и т.д.
3. в приложении определяется адрес нужной функции с помощью GetProcAddress и происходит вызов этой функциии
4. в библиотеке исполняется код вызванной функции
Очевидно, что ошибка происходит на шаге 2, т.к. сама функция LoadLibrary генерировать эту ошибку не может, а (по резульатам отладки) до шага 3 исполнение не доходит.
При попытке отладки из библиотеки - управление в нее передается, сразу получаю ошибку. При отладке из исполняемого приложения ошибка выскакивает при вызове LoadLibrary, в библиотеку управление не передается (и не должно в этом случае).
← →
VMcL © (2005-03-01 14:52) [3]>>Digitman © (01.03.05 14:37) [1]
Меня, обычно, в таких случаях посещает мыслёнка ещё более гадостная: поискать текст сообщения в исходниках VCL/CLX.
← →
dmitry81_2 (2005-03-01 14:52) [4]Самое главное забыл - кода, указанного в п. 2 нет в принципе - между begin и end ничего нет. Вот в этом и проблема.
← →
Digitman © (2005-03-01 15:01) [5]
> VMcL © (01.03.05 14:52) [3]
знаешь ли, меня - тоже) .. меню "Search \ Files and Folders.." пока еще никто не упразднял)
> т.к. сама функция LoadLibrary генерировать эту ошибку не
> может
ОЧ даже может !
← →
dmitry81_2 (2005-03-01 15:34) [6]>>VMcL © (01.03.05 14:52) [3]
Спасибо за совет! Искать текст сообщения, конечно, не самая удачная идея, но заглянуть туда иногда полезно;)
Прямо в заголовке QForms написано примерно сделующее:
CLX и Qt допускают наличие только одного объекта TApplication ... заботиться об этом должен сам разрабочик ... обеспечить этом можно следующими способами ...
1. динамически загружаемые библиотеки не не должны прямо или косвенно ссылаться на VisualCLX ...
Такие дела ... выходит, поставленную задачу решить нельзя в принципе, т.е. как я понял никаких визуальных компонентов в динамически подгружаемых библиотеках, использующих CLX, быть не должно.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.048 c