我正在将我的项目从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)
建议为什么会出现这种错误.
谢谢
我建议你查看定义OnAfterCBSelectMsg并修改它以LRESULT用作返回类型,WPARAM并LPARAM作为参数(就像错误消息中的第二个签名一样).
LRESULT定义为LONG_PTR,只要PTR名称中出现,您应该期望它足够大以容纳指针.指针在32位上为4个字节,在64位上为8个字节,因此如果编译为64位,LRESULT则不适合a long(4个字节).
使用WPARAM和LPARAM作为参数类型也很重要,因为它们的大小也会根据平台而变化.有关详细信息,请参阅此问题的答案: LPARAM和WPARAM的定义是什么?