【问题标题】:Resurrecting MFC/Visual Studio 6.0 project in VS2010在VS2010中复活MFC/Visual Studio 6.0项目
【发布时间】:2012-05-23 23:09:21
【问题描述】:

我正在尝试在 Visual Studio 2010 中构建 MFC Visual Studio 6.0 项目。 编译器给我一个错误:

错误 C2440: 'static_cast' : 无法从 'void (__thiscall ProgressDialog::* )(void)' 到 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'

//------------------------------------------------ // 消息映射

BEGIN_MESSAGE_MAP(ProgressDialog, CDialog) ON_BN_CLICKED(IDC_CANCEL, OnCancelClicked) ON_MESSAGE(MSG_FINISHED, OnFinished) END_MESSAGE_MAP()

有什么建议吗?

佩德罗

【问题讨论】:

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


    【解决方案1】:

    将您的 ON_MESSAGE 宏更改为 ON_MESSAGE_VOID。 ON_MESSAGE 宏从接收 WPARAM 和 LPARAM 参数返回 LRESULT。您的编译器错误消息指出您的 OnFinished() 方法是返回 void 的 void 参数。这就是 ON_MESSAGE_VOID 宏处理的内容。

    补充:

    参考底部C++ Q & A -- Microsoft Systems Journal July 1999

    【讨论】:

    • 完全无证 - 很好的发现。
    • 好吧,Paul DiLascia 几年前有一篇关于它的文章......如果我还记得 Paul DiLascia,我已经写了太久了。
    • 我的掌声。你拯救了我的一天。我还必须删除宏的第二个参数中的函数之前的 & 符号 &
    【解决方案2】:

    MFC7.0中有breaking changes,包括:

    ON_MESSAGE宏中的函数参数必须与类型匹配

    afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)

    您的ProgressDialog::OnFinished 方法现在需要返回一个LRESULT

    【讨论】:

    • 感谢您回复我的帖子尝试在 Onfinished 的定义和声明中将返回类型更改为 LRESULT - 但现在我得到 'static_cast' : cannot convert from 'LRESULT (__thiscall ProgressDialog::* ) (void)' 到 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'
    • 您还需要在函数的定义和声明中添加(WPARAM,LPARAM)参数。
    猜你喜欢
    • 2013-03-31
    • 2023-03-21
    • 2015-11-12
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    相关资源
    最近更新 更多