visual-studio - 是否允许在禁用 rtti 的应用程序中链接启用 rtti 的 DLL?

标签 visual-studio dll visual-studio-2005 rtti

我有一个解决方案来构建一个 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/

相关文章:

c# - 如何防止在 C# 中出现异常?

c# - resx 资源文件显示警告 "The resource name is not a valid identifier"

c# - 使用 C++/CLI 而不是 C# 来包装(第三方)C 库 (dll) 有什么优势?

.net - .NET 4 出现 "The specified procedure could not be found"错误

c - 如何修复 PrintUIEntry 返回错误代码 2

c++ - 如何在 std::map 中使用结构作为键

c++ - 我如何解决 : "error C2039: ' {ctor }' : is not a member of" in Visual Studio 2005?

c++ - 访问冲突读取位置 0xfeef002A

visual-studio - NuGet中的输入字符串格式错误

c++ - Visual Studio 2017 在 extern "C"中使用模板时出现不正确的错误