You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio 2022 MFC项目BEGIN/END_MESSAGE_MAP报错求助

MFC项目编译错误及解决办法

错误列表及对应修复方案

1. Error C1189:使用/MD[d](CRT DLL版本)构建MFC应用程序需要MFC共享DLL版本,请定义_AFXDLL或不使用/MD[d]

这是优先级最高的基础配置问题,会影响后续其他错误的表现,修复步骤:

  • 右键项目 → 属性,打开项目配置窗口
  • 进入配置属性 → C/C++ → 预处理器,在「预处理器定义」中添加_AFXDLL
  • 或切换CRT版本:进入配置属性 → C/C++ → 代码生成,将运行库从/MD或/MDd改为/MT或/MTd(静态CRT版本)

2. Error E1086:对象的类型限定符与成员函数"CappApp::GetThisMessageMap"不兼容、Error C2662:无法将'this'指针从'const CappApp'转换为'CappApp &'

这类错误源于消息映射生成代码中this指针被错误当作const传递,修复方式:

  • 确认CappApp类正确继承CWinAppEx,且BEGIN_MESSAGE_MAP(CappApp, CWinAppEx)的基类声明无误
  • 检查是否在const成员函数中调用了需要非const对象的MFC消息映射相关方法,需调整函数的const限定,或改用非const对象调用

3. 注释ON_COMMAND行触发C2248错误、注释整个消息映射块触发LNK2001/LNK1120链接错误

  • C2248错误:CWinApp::OnFileNew等是保护成员,不能直接在派生类消息映射中绑定基类保护成员函数。正确做法是:
    1. 在CappApp类中重写对应方法:
      class CappApp : public CWinAppEx
      {
      public:
          afx_msg void OnFileNew();
          afx_msg void OnFileOpen();
          // 其他类声明内容
      };
      
      // 实现文件中
      void CappApp::OnFileNew()
      {
          CWinAppEx::OnFileNew(); // 调用基类实现,可添加自定义逻辑
      }
      
      void CappApp::OnFileOpen()
      {
          CWinAppEx::OnFileOpen();
      }
      
    2. 在消息映射中绑定自己的成员函数:
      BEGIN_MESSAGE_MAP(CappApp, CWinAppEx)
          ON_COMMAND(ID_FILE_NEW, &CappApp::OnFileNew)
          ON_COMMAND(ID_FILE_OPEN, &CappApp::OnFileOpen)
      END_MESSAGE_MAP()
      
  • LNK2001/LNK1120错误:MFC应用必须依赖消息映射块关联消息处理逻辑,删除后框架找不到必要的消息映射入口,会出现未定义符号的链接错误。必须保留消息映射块,修复其中的错误而非删除。

内容的提问来源于stack exchange,提问作者Michaelinscarbororough

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 16:02:41