2

我有一个解决方案来构建一个在其项目属性中启用了运行时类型信息的 DLL。这是 Visual Studio 2005 中的默认值 (/GR)。在我们的库中,我们有很多 dynamic_casts,所以我目前无法在没有运行时类型信息的情况下构建 DLL。

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

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

我用一个小例子尝试了这种情况,在这个例子中,一个 DLL 是用一些代码进行动态转换创建的。DLL 是在启用 RTTI 的情况下构建的一个小型应用程序使用 DLL,尤其是带有 dynamic_casts 的代码。此应用程序内置 RTTI禁用。它工作正常。但是由于不可预测的行为,任何事情都可能发生......

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

4

2 回答 2

3

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

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

在非 RTTI 环境中使用启用 RTTI 的 DLL 的最鲜明示例是 inproc OLE 服务器。您可以使用嵌入到任何应用程序中的任何选项开发 DLL。

于 2009-08-06T11:50:05.440 回答
0

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

大多数时候 dynamic_cast 都没有指向设计问题。

于 2009-08-06T11:51:25.577 回答