Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
1-1109409678
Saint-Virus
2005-02-26 12:21
2005.03.13
Если из буфера вставить текст в Tedit, появляются знаки вопроса


1-1109340022
Shanker
2005-02-25 17:00
2005.03.13
Спрятать окно при сворачивании


1-1109264947
Dwan
2005-02-24 20:09
2005.03.13
множества и строки


1-1109665209
aleksey
2005-03-01 11:20
2005.03.13
Как задать ёмкость буфера com порта и как его очистить ?


1-1109406098
Zapekank0
2005-02-26 11:21
2005.03.13
Запуск одной и той же проги несколько раз