错误C2440:'static_cast':无法从'long'转换为'LRESULT'

Arv*_*ind 2 visual-c++

我正在将我的项目从32位版本转换为64位版本,当以64位编译项目时,我得到以下错误.

Error   2   error C2440: 'static_cast' : cannot convert from 'long (__cdecl BrnDefDlgClass::* )(UINT,long)' to 'LRESULT (__cdecl CWnd::* )(WPARAM,LPARAM)'  C:\Program Files (x86)\...\CXX\TEST.CXX 854 1   cfg
Run Code Online (Sandbox Code Playgroud)

这个错误指向我下面的代码行.

ON_MESSAGE        (WM_USER_AFTERCBNSELCHANGE,   OnAfterCBSelectMsg)
Run Code Online (Sandbox Code Playgroud)

建议为什么会出现这种错误.

谢谢

Bot*_*000 5

我建议你查看定义OnAfterCBSelectMsg并修改它以LRESULT用作返回类型,WPARAMLPARAM作为参数(就像错误消息中的第二个签名一样).

LRESULT定义为LONG_PTR,只要PTR名称中出现,您应该期望它足够大以容纳指针.指针在32位上为4个字节,在64位上为8个字节,因此如果编译为64位,LRESULT则不适合a long(4个字节).

使用WPARAMLPARAM作为参数类型也很重要,因为它们的大小也会根据平台而变化.有关详细信息,请参阅此问题的答案: LPARAM和WPARAM的定义是什么?