Russian Qt Forum

Qt => Общие вопросы => Тема начата: TYuD от Январь 15, 2014, 18:51



Название: Проблема подключения к Qt-программе DLL, написанных на Builder
Отправлено: TYuD от Январь 15, 2014, 18:51
Пишу программу на Qt (Qt5.2, MinGW, WinXP). К ней подключаются Dll-ки, написанные, как на Qt, так и на C++Builder. DLLки писал как пустышки-заглушки, с минимальным функционалом для отладки. Пользовался QLibrary. Проблемы не возникали.

Но вот написал код для подключения новой ДЛЛки. И подключил существующую ДЛЛку, написанную на Билдере, которую используем уже много лет. Программа рушится. Причем в разные моменты времени. Иногда половину просчитает, но чаще раньше падает. То ошибку плавающей запятой вывалит, то еще какую..

Рушится даже если не выуживаю из ДЛЛки и, соответсвенно, не использую ни одну из импортируемых функций. Только делаю QLibrary::load.

Заново создал ДЛЛку-пустышку на Билдере. Рушится. Потом создал аналогичную пустышку на Qt. Не рушится. Потом убрал QLibrary, а вместо нее использую LoadLibrary. Перестали рушится Билдеровские пустышки.

На радостях запустил толстую ДЛЛку - опять рушится. Вычистил эту ДЛЛку до функций-пустышек - все равно рушится. Сделал еще один проект ДЛЛ на Билдере с пустышками, но с поддрежкой VCL(как и основная, толстая ДЛЛ) - рушится. Т.е. как бы виновата VCL?

Уже не знаю что и делать. Задача оч. ответсвенная. Помогите, пожалуйста.

Заметил странную особенность, что DllEntryPoint из ДЛЛки вызывается много раз, цепляясь не только к процессу, но и к потокам. Причем к потокам цепляется как-то странно, количество прицепов существенно не совпадает с количеством отцепов. Иногда вначале начинает отцепляться, хотя до этого не прицеплялся. Так должно быть?


Название: Re: Проблема подключения к Qt-программе DLL, написанных на Builder
Отправлено: alex312 от Январь 15, 2014, 19:01
...Так должно быть?
ДА ! (http://en.wikipedia.org/wiki/Name_mangling), Должно . (http://techbase.kde.org/Policies/Binary_Compatibility_Issues_With_C++)


Название: Как-то заработало
Отправлено: TYuD от Январь 16, 2014, 22:45
В ДЛЛке на Билдере убрал поддержку VCL и поменял файловый ввод/вывод с fstream на fopen. Теперь не падает. Надолго ли?