2009-08-06 11 views
2

J'ai une solution pour construire une DLL avec des informations de type à l'exécution activées dans ses propriétés de projet. C'est la valeur par défaut (/ GR) dans Visual Studio 2005. Dans notre bibliothèque, nous avons un bon nombre de dynamic_casts, donc je ne suis pas capable actuellement de construire la DLL sans informations de type à l'exécution.Est-il autorisé à lier DLL activé rtti dans l'application rtti désactivé?

Maintenant, mon client utilise les outils de développement de Dassault Systèmes, qui indiquent qu'ils ne peuvent pas utiliser les informations de type à l'exécution. Il est désactivé (/ GR-) toujours.

La question est de savoir si c'est un problème ou non?

J'ai essayé cette situation avec un petit exemple dans lequel une DLL est créée avec un peu de code effectuant des lancements dynamiques. La DLL est construite avec RTTI activé. Une petite application utilise la DLL et surtout le code avec les dynamic_casts. Cette application est construite RTTI désactivé. Ça fonctionne bien. Mais avec un comportement imprévisible, tout peut arriver ...

Je voudrais dire à mon client que le fait de mixer des DLL avec certains d'entre eux en utilisant RTTI et d'autres n'utilisant pas RTTI ne pose (en utilisant Google, MSDN, etc.). Est-ce que quelqu'un sait la réponse à ce problème?

Répondre

3

Oui, vous pouvez, mais avec de très grandes restrictions. Certains d'entre eux:

  • ne passent pas une exception de DLL,
  • ne pas utiliser dynamic_cast sur le code non-RTTI,
  • Vous pouvez obtenir un effet étrange en comparant la taille du tableau des classes de DLL ! sizeof (DllClass [10]) = sizeof (DllClass) * 10
  • ...

L'exemple le plus lumineux de l'utilisation RTTI activé DLL dans un environnement non-RTTI - est inproc serveur OLE. Vous pouvez développer DLL avec toutes les options, qui est intégré dans n'importe quelle application.

0

À mon humble avis, il ne devrait pas y avoir de problème tant que vous n'appelez pas dynamic_cast. Alors que Rtti est un mécanisme très simple, il ne devrait pas faire de mal à mélanger la configuration. Il peut juste blesser le développeur qui oublie à ce sujet et écrit le code défaillant. Dans tous les cas, dynamic_cast ne signale aucun problème de conception.