![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| borisbn |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Добрый день всем.
Читая документацию по 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 "вырастает" из-за плохого проектирования - знаю и стараюсь никогда не использовать. Так что вопрос скорее из теоретической области, нежели из практической Это сообщение отредактировал(а) borisbn - 1.2.2011, 17:24 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||||||||
|
|||||||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
3.gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5):
Может проблема имеется только в случае плагинов (загрузки библиотек в рантайме) или при использовании dynamic_cast в библиотеке?.. |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
bsa, спасибо. А ты также делал *.so + *.executable ?
Завтра попробую загружать через QLibrary::resolve и вариант с cast'ом в dll-ке. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
да. Мне вообще не понятно, какая может быть проблема. Ведь информация о типе хранится в vtable. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |