2009-08-06 56 views
2

我有一个解决方案来建立一个在其项目属性中启用运行时类型信息的DLL。这是Visual studio 2005中的默认(/ GR)。在我们的库中,我们有很少的dynamic_casts,所以我目前无法在没有运行时类型信息的情况下构建DLL。允许在rtti禁用的应用程序中链接rtti启用的DLL吗?

现在我的客户正在使用DassaultSystèmes的开发工具,该工具声明他们不能使用运行时类型信息。它被禁用(/ GR-)总是。

问题是这是否是一个问题?

我试图用一个小例子来说明这种情况,在这个小例子中,一个动态转换的代码创建了一个DLL。该DLL使用RTTI 启用。一个小应用程序使用DL​​L,尤其是使用dynamic_casts的代码。此应用程序内置RTTI 已禁用。它工作正常。但随着不可预知的行为任何事情都有可能发生......

我想告诉我的客户,与他们中的一些使用RTTI和其他人不使用RTTI混合的DLL是没有问题的,但我找不到任何关于它的详细信息(使用Google,MSDN等)。有谁知道这个问题的答案吗?

回答

3

是的,你可以,但有很大的限制。他们中的一些:

  • 不传递任何异常出来的DLL,
  • 没有对非RTTI代码中使用的dynamic_cast,
  • 您可以通过从DLL比较类数组的大小获得奇效!的sizeof(DllClass [10])=的sizeof(DllClass)* 10
  • ...

使用RTTI的最明亮的例子启用DLL非RTTI环境 - 是进程内OLE服务器。您可以使用嵌入到任何应用程序中的任何选项来开发DLL。

0

恕我直言,不应该有问题,只要你不调用dynamic_cast。 虽然Rtti是一个非常简单的机制,但它不应该伤害混合设置。 这可能会伤害开发人员忘记它并写入失败的代码。

大部分时间都不是dynamic_cast指向设计问题。