我有一个解决方案来构建一个 DLL,并在其项目属性中启用运行时类型信息。这是 Visual Studio 2005 中的默认值 (/GR)。在我们的库中,我们有很多dynamic_cast,因此我目前无法在没有运行时类型信息的情况下构建 DLL。
现在我的客户正在使用达索系统的开发工具,该工具声明他们不能使用运行时类型信息。它始终处于禁用状态 (/GR-)。
问题是这是否有问题?
我用一个小例子尝试了这种情况,其中使用一些执行动态转换的代码创建了 DLL。该 DLL 是在启用 RTTI 的情况下构建的。小型应用程序使用该 DLL,尤其是带有dynamic_casts 的代码。此应用程序构建为 RTTI 禁用。效果很好。但由于行为不可预测,任何事情都可能发生......
我想告诉我的客户,将 DLL 与其中一些使用 RTTI 和其他不使用 RTTI 的 DLL 混合不是问题,但我找不到有关它的详细信息(使用 Google、MSDN 等)。有谁知道这个问题的答案吗?
最佳答案
是的,您可以,但有很大的限制。其中一些:
- 不要从 DLL 中传递任何异常,
- 不要在非 RTTI 代码上使用dynamic_cast,
- 通过比较 DLL 中类数组的大小,可以得到奇怪的效果 sizeof(DllClass[10]) != sizeof(DllClass)*10
- ...
在非 RTTI 环境中使用支持 RTTI 的 DLL 的最明显的例子是 inproc OLE 服务器。您可以使用任何选项开发 DLL,并将其嵌入到任何应用程序中。
关于visual-studio - 是否允许在禁用 rtti 的应用程序中链接启用 rtti 的 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1238325/