c++ - 将 Visual C++ 6 项目升级到 Visual Studio 2008 时出现的破译错误

标签 c++ windows visual-studio-2008 visual-c++ open-source

我想看看我是否可以带来这个名为 MouseTool 的废弃开源项目与 Windows Vista 保持同步。这是一个实时点击器,可以帮助那些在点击鼠标时感到疼痛的人(比如我自己)。当鼠标停在屏幕上的某个位置时,该软件会模拟点击。

似乎几年来没有人接触过这个项目,所以当我在 Visual Studio 2008 中打开它时,我遇到了很多错误。我对 Visual Studio 知之甚少,希望这些错误能给这里的人敲响警钟。如果有人可以提供有关我如何着手解决其中一些错误的任何提示,我们将不胜感激。

举个例子,这个错误。 . .

Error   18  error C2440: 'static_cast' : 
cannot convert from 'void (__thiscall COptionsSheet::* )(UINT,POINTS)' 
to 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'   

<强>。 . .对应这一行:

ON_MESSAGE( WM_NCLBUTTONDOWN,   OnNCLDown )

来自这个区 block :

BEGIN_MESSAGE_MAP(COptionsSheet, CPropertySheet)
    //{{AFX_MSG_MAP(COptionsSheet)
    ON_WM_HELPINFO()
    ON_WM_MOUSEMOVE()
    ON_WM_SETCURSOR()
    //}}AFX_MSG_MAP
    ON_MESSAGE( WM_NCLBUTTONDOWN,   OnNCLDown )
    ON_MESSAGE( WM_NCLBUTTONUP,     OnNCLUp )
    ON_BN_CLICKED(ID_HELP, OnHelpButton)
END_MESSAGE_MAP()

为任何人摇铃?

最佳答案

某些 MFC 事件处理程序的成员签名未在 vc6 中正确检查 - 在 VC6 中错误编译的代码需要修复才能在您使用的更新编译器中编译。

ON_MESSAGE 目标的处理程序需要符合此签名:

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

您的签名是这样的:

void (COptionsSheet::* )(UINT,POINTS)

CWnd 已经有这个成员了:

afx_msg void OnNcLButtonDown(UINT nHitTest, CPoint point);

使用该签名而不是您自己的手滚 OnNclDown。

编辑:对 OnNclButtonDown 使用 ON_WM_NCLBUTTONDOWN 而不是 ON_MESSAGE。

关于c++ - 将 Visual C++ 6 项目升级到 Visual Studio 2008 时出现的破译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/870580/

相关文章:

c++ - 我可以在不复制的情况下将 std::vector<char> 重新解释为 std::vector<unsigned char> 吗?

c++ - 双核机器上的多线程?

c++ - 无状态 lambda 作为静态局部变量

linux - CIFS/SMB 写入优化

c++ - 运算符 "delete[]": how to detect? 误用 "delete"时的行为?

c++ - 使用 STL 队列的循环队列?

python - 如何在 Windows 控制台中用 python 打印 unicode 字符串

windows - 批处理脚本循环遍历数组并将值用作exe的参数

c# - Silverlight MultiScaleImage 的源属性

c++ - Visual Studio C++ 如何在我的“关于”框中显示动态消息(即字符串)?