【问题标题】:Is loading both release and debug version of MSVCR (or UCRT etc.) officially supported by MS?MS 是否正式支持加载 MSVCR(或 UCRT 等)的发布和调试版本?
【发布时间】:2016-04-18 12:02:32
【问题描述】:

当您从 (C++) 程序链接到 MS Visual C Runtime Library 时,您通常只链接一个版本,发布或调试版本:MSVCR<ver>.dllMSVCR<ver>D.dllwith VS2015 ucrtbase[D].dlls 和它们的附加依赖项。

免责声明:混合使用它们的用法并从一个到另一个交换指针(等)会导致崩溃和精神错乱——这不是 em> 这个问题是关于什么的。

但是,当您的 C 或 C++ 程序链接到仅在发布变体中提供的第 3 方 (C) DLL,并且该 DLL 在内部(!) 使用 MSVCR 时,它将链接到并加载发布版本,即使您在调试版本中运行程序也是如此。 (这种情况的一个变体是,第 3 方库可以再次在内部使用与您完全不同的 MSVCR###.dll 版本,在这种情况下,即使在您的发布版本中它们也会有所不同.

这对我来说是一个非常标准的场景,我一直认为这“有效”(实际上它似乎确实)。

然而,我一直在想,这是否真的是这些 MS 库的预期和支持方案?是吗?有没有相反的经历?

【问题讨论】:

标签: visual-studio visual-c++ dll msvcrt


【解决方案1】:

是的,这是受支持的,并且很常见。

例如,如果您构建一个 C++/CLI Windows 窗体应用程序,您最终可能会在进程中加载​​至少三个不同的 CRT:您的程序将使用 msvcr.dll,CLR 将使用 msvcr120_clr0400.dll,以及您的进程中加载​​的各种操作系统组件可能会使用 msvcrt.dll。

【讨论】:

  • 感谢詹姆斯告诉我们!我对这个答案很好......但是在 MSDN 文档中可能有任何明确的提及吗?干杯。
  • 我最近想知道一个相关的话题:stackoverflow.com/questions/40178865/…
猜你喜欢
  • 2011-10-26
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-24
  • 2013-12-15
  • 2016-01-25
  • 1970-01-01
相关资源
最近更新 更多