Разрешено ли связывать DLL с поддержкой rtti в приложении с отключенным rtti? - PullRequest
2 голосов
/ 06 августа 2009

У меня есть решение для создания DLL с включенной информацией о типе времени выполнения в свойствах проекта. Это значение по умолчанию (/ GR) в Visual studio 2005. В нашей библиотеке есть несколько динамических динамических трансляций, поэтому в настоящее время я не могу собрать DLL без информации о типах во время выполнения.

Теперь мой клиент использует инструменты разработки от Dassault Systèmes, в которых говорится, что они не могут использовать информацию о типах времени выполнения. Он отключен (/ GR-) всегда.

Вопрос в том, является ли это проблемой?

Я попробовал эту ситуацию с небольшим примером, в котором DLL создается с небольшим количеством кода, выполняющего динамическое приведение. DLL построена с поддержкой RTTI . Небольшое приложение использует DLL и особенно код с dynamic_casts. Это приложение построено RTTI отключено . Работает нормально. Но с непредсказуемым поведением все может случиться ...

Я хотел бы сказать моему клиенту, что смешивание библиотек DLL с некоторыми из них, использующими RTTI, и другими, не использующими RTTI, не является проблемой, но я не смог найти подробную информацию об этом (используя Google, MSDN и т. Д.). Кто-нибудь знает ответ на эту проблему?

Ответы [ 2 ]

3 голосов
/ 06 августа 2009

Да, можно, но с очень большими ограничениями. Некоторые из них:

  • не передавайте исключения из DLL,
  • не использовать dynamic_cast для кода, отличного от RTTI,
  • Вы можете получить странный эффект, сравнивая размер массива классов из DLL sizeof (DllClass [10])! = Sizeof (DllClass) * 10
  • ...

Самый яркий пример использования DLL с поддержкой RTTI в среде без RTTI - это inproc OLE сервер. Вы можете разрабатывать DLL с любыми опциями, встроенными в любое приложение.

0 голосов
/ 06 августа 2009

ИМХО не должно быть проблем, если вы не вызываете dynamic_cast. Хотя Rtti - очень простой механизм, не мешает смешивать настройки. Это может просто повредить разработчику, который забывает об этом и пишет ошибочный код.

Так или иначе, большинство времени dynamic_cast указывает на проблему проектирования.

...