Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
1-1109645418
Глеб
2005-03-01 05:50
2005.03.13
Картинки в TMemo


1-1109242022
andycat
2005-02-24 13:47
2005.03.13
Глюк Delphi или другое?


3-1108393724
Gost
2005-02-14 18:08
2005.03.13
Как добавить индексное поле?


14-1108830923
R.D.I.
2005-02-19 19:35
2005.03.13
Задачка или почему это работает?


3-1108448610
first_may
2005-02-15 09:23
2005.03.13
BLOB





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский