| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > dynamic_cast между dll-ками |
| Автор: borisbn 1.2.2011, 17:19 | ||||||||||
| Добрый день всем. Читая документацию по Qt набрёл на такую фразу в описании ф-ции qobject_cast
из чего я делаю вывод, что dynamic_cast может не работать across dynamic library boundaries. Погуглив на тему rtti, dynamic_cast, shared libraries и т.п., нашёл несколько обсуждений на эту тему, но 1) все они касались передачи между библиотеками указателей на шаблонные классы 2) везде присутствовало упоминание о gcc Провёл такой эксперимент на MSVC 2008 сделал два проекта DLL и консольный. код DLL-ки i_face.h
i_face.cpp
и код консольной программы
выводит, как и ожидалось, так
т.е. всё в порядке. теперь собственно вопрос: 1) Что это за проблема "RTTI across dynamic library boundaries" ? 2) Кто-нибудь сталкивался с проблемой передачи указателя на базовый класс между библиотеками с последующим dynamic_cast'ом его ? 3) Просьба проверить это на gcc, т.к. на liveworkspace или на codepad создать и загрузить потом *.so нельзя. Спасибо P.S. То, что dynamic_cast "вырастает" из-за плохого проектирования - знаю и стараюсь никогда не использовать. Так что вопрос скорее из теоретической области, нежели из практической |
| Автор: bsa 1.2.2011, 18:15 | ||
3.gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5):
Может проблема имеется только в случае плагинов (загрузки библиотек в рантайме) или при использовании dynamic_cast в библиотеке?.. |
| Автор: borisbn 1.2.2011, 19:53 |
| bsa, спасибо. А ты также делал *.so + *.executable ? Завтра попробую загружать через QLibrary::resolve и вариант с cast'ом в dll-ке. |
| Автор: bsa 1.2.2011, 20:13 |
да. Мне вообще не понятно, какая может быть проблема. Ведь информация о типе хранится в vtable. |