【问题标题】:migrating a project from VS2008 to VS2013将项目从 VS2008 迁移到 VS2013
【发布时间】:2020-08-14 18:56:32
【问题描述】:

我正在将一个项目从 VS2008 迁移到 VS2013。目前在运行应用程序时遇到问题。 它说:

**Debug assertion failed**
Program C:\Windows\SYSTEM32\mfc120d.dll
FILE: f:\dd\vctools\vclibs\ship\atlmfc\src\mfc\doctempl.cpp
LINE: 25

这是代码中出现问题的地方:

cpFormDefDocTemplate = new CMultiDocTemplate(
        MAIDR_MAINFRAME,
        RUNTIME_CLASS(EHF_ManagerDoc),
        RUNTIME_CLASS(EHF_ManagerChildFrame),       // main SDI frame window
        RUNTIME_CLASS(EHF_ManagerView));

我不确定如何继续进行此操作。需要的帮助。提前致谢。

【问题讨论】:

  • 安装了哪些版本的 Visual C++ Redistributable Packages?
  • VS2008 和 VS2013
  • 您是否正在查看断言的正确调用堆栈级别?这看起来像客户端代码(即您的代码),还是 MFC 代码?从字面上打开 f:\dd\vctools\vclibs\ship\atlmfc\src\mfc\doctempl.cpp (或者你实际安装它的任何地方 - 它可能不是 f:...)。确保它是 VS2013 源。转到第 25 行。该文件的我的版本 (VS2008) 位于带有一堆 ASSERT 的 CDocTemplate 类的 ctor 中。在那里断言失败(可能在您显示的代码的调用中)。
  • Assertion Failed Dialog Box。所以继续,按“重试”(正如对话框已经告诉你的那样)。这会告诉你,你没有建立哪个条件。这是您的代码中的错误,而不是 MFC。也与迁移无关。
  • 是的,我已经检查了上述路径中的代码。它是VS2013源码。它在 VS2008 中工作的代码相同。为什么不在 VS2013 中?

标签: c++ visual-studio visual-studio-2013 mfc


【解决方案1】:

当您说“我已检查代码”时,实际的 ASSERT 语句是什么?这绝对不是您发布的代码。显示 THAT 代码(ASSERT 语句所在的代码)。

例如,这是来自 VS2008 的代码,我在第 25 行附近突出显示(VS2013 可能类似,但不准确):

这是您需要查看的代码。您的代码是您的 CTOR,它隐式链接回导致 ASSERT 的此 MFC ctor。您的文档、框架或视图未正确移植。具体的 ASSERT 会告诉你是哪一个(实际上可能是全部 3 个,到目前为止它只是对第一个进行断言)。

【讨论】:

    猜你喜欢
    • 2019-12-08
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多