【问题标题】:Migrating MFC app from Visual Studio 2012 to Visual Studio 2013将 MFC 应用程序从 Visual Studio 2012 迁移到 Visual Studio 2013
【发布时间】:2015-01-19 07:40:46
【问题描述】:

我正在尝试将 MFC 项目从 Visual Studio 2012(编译良好)迁移到 Visual Studio 2013,我得到了一堆未定义的错误,如下所示。

这些都是在拉入预编译头文件时引起的——我只能假设我以错误的顺序包含了一些 MFC 头文件——有人知道它们现在应该是什么顺序吗? 这些错误表明 PGESTURECONFIG 是在 WinUser.h 中定义的 - 但它不喜欢我在 afxwin.h 之前的任何地方都包含它(如果我指示“无目标体系结构”,它会产生不同的错误)

这就是我认为相关部分目前在预编译头文件中的原因:

#define VC_EXTRALEAN        // Exclude rarely-used stuff from Windows headers

#include <afxwin.h>         // MFC core and standard components
#include <afxext.h>         // MFC extensions
#include <afxcmn.h>                 // MFC support for Windows 95 Common Controls
#include <afxcview.h>               // MFC CTreeView, etc...

这就是我遇到的错误:

3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2092): error C2146: syntax error : missing ';' before identifier 'm_pConfigs'
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2092): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2019): error C2065: 'GID_ZOOM' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2019): error C2065: 'GC_ZOOM' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2025): error C2065: 'GID_ROTATE' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2025): error C2065: 'GC_ROTATE' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2031): error C2065: 'GID_TWOFINGERTAP' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2031): error C2065: 'GC_TWOFINGERTAP' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2045): error C2065: 'GID_PAN' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2045): error C2065: 'GC_PAN' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2051): error C2065: 'GID_PAN' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2051): error C2065: 'GC_PAN_WITH_SINGLE_FINGER_VERTICALLY' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2057): error C2065: 'GID_PAN' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2057): error C2065: 'GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2063): error C2065: 'GID_PAN' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2063): error C2065: 'GC_PAN_WITH_GUTTER' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2069): error C2065: 'GID_PAN' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2069): error C2065: 'GC_PAN_WITH_INERTIA' : undeclared identifier
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2953): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2953): error C2146: syntax error : missing ';' before identifier 'GetCurrentGestureInfo'
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2954): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2956): warning C4183: 'GetCurrentGestureInfo': missing return type; assumed to be a member function returning 'int'
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2986): error C2061: syntax error : identifier 'PTOUCHINPUT'
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2996): error C2061: syntax error : identifier 'PTOUCHINPUT'
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(3009): error C2146: syntax error : missing ';' before identifier 'm_pCurrentGestureInfo'
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(3009): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
3>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afxwin.h(2955): error C2065: 'm_pCurrentGestureInfo' : undeclared identifier

任何建议表示赞赏。

【问题讨论】:

  • 您的小标题示例在另存为 stdafx.h 时编译良好,然后使用仅对 #include "stdafx.h"cl /c /Yc stdafx.h stdafx.cpp 执行的源进行编译,因此必须有其他事情发生。您的错误列表似乎与 Win8 功能有关。确保您已定义 _WIN32_WINNT_MAXVER 以限制您想要支持的 Windows 版本。 @Bathsheba:没有帮助。在企业环境中,我们不能随心所欲地改变我们的技术基础。

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


【解决方案1】:

在将 Visual Studio 2010 项目转换为 Visual Studio 2013 后,我今天遇到了完全相同的问题。 在我的例子中,它原来是通过项目的 C++ 配置属性(预处理器定义部分)注入的“硬编码”WINVER 定义,其中 WINVER=0x500 是很久以前定义的。

【讨论】:

    【解决方案2】:

    我通过将Properties -&gt; C/C++ Preprocessor Definitions 设置为来解决它

    NTDDI_VERSION= 0x06030000;WINVER=0x0A00;_WIN32_WINNT=0x0A00;%(PreprocessorDefinitions)
    

    【讨论】:

      【解决方案3】:

      我已将这些设置添加到 stdafx.h 文件中,它对我有用:

      WINVER=0x601;
      _WIN32_WINNT=0x601;
      _WIN32_WINDOWS=0x601;
      _WIN32_IE=0x601;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-10
        • 1970-01-01
        • 2014-03-23
        • 1970-01-01
        • 2016-04-16
        • 2016-09-01
        • 2014-08-31
        • 1970-01-01
        相关资源
        最近更新 更多