【问题标题】:Can a single process load/use mscvr100.dll and msvcr110.dll without causing problems?单个进程能否加载/使用 mscvr100.dll 和 msvcr110.dll 而不会导致问题?
【发布时间】:2013-02-11 22:32:19
【问题描述】:

一个混合模式的 C++ 应用程序是使用 VS2012 构建的,它引用托管 DLL Noesis.Javascript.dll(我相信它是用 VS2010 构建的),而后者又在运行时与 msvcr100.dll 链接。

我观察到一个崩溃,似乎显示 Noesis.Javascript.dll 中的代码从 VS2012 的 msvcr110.dll 调用库函数。

是否可以使用两个不同版本的 C++ 运行时库运行单个进程,或者这里发生的情况可能是问题的原因?有什么选择?

【问题讨论】:

    标签: visual-studio-2010 visual-c++ visual-studio-2012 msvcrt mixed-mode


    【解决方案1】:

    正如answer 中提到的,实际上不可能合并这些二进制文件。崩溃可能是不兼容造成的。

    您可以尝试以下操作:项目属性 -> 常规 -> 平台工具集:Visual Studio 2010 (v100)。

    【讨论】:

      【解决方案2】:

      可以在同一个进程中使用两个运行时 DLL,但要安全地这样做需要非常小心,以确保不会在另一个进程中使用来自一个的对象。

      【讨论】:

      • 当有选择时,是的,应该避免。但是,我认为重要的是不要以绝对的方式说明这一点。在没有 MFC 对象跨越模块边界的体系结构中,在同一进程中混合不同的 MFC 版本是完全合理的。一种相当常见的这种情况是,具有 C 接口的模块在内部使用 CString,但没有来自 MFC 的其他任何东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多