error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )相关的知识,希望对你有一定的参考价值。
在VC++6.0向导中完成项目迁移到VS2012版的错
编译时遇到两个问题,首先是
error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )(BOOL,HTASK)”转换为“void (__thiscall CWnd::* )(BOOL,DWORD)”
1> 从基类型到派生类型的强制转换需要 dynamic_cast 或 static_cast
error C2664: “CWnd::OnActivateApp”: 不能将参数 2 从“HTASK”转换为“DWORD”;
一行行的改,第一个是在CMainFrame中没有对消息映射ON_WM_ACTIVATEAPP()处理,这是因为第二个错误引起的,因为现在VS2012中把函数中声明了的HASK的类型是DWORD,把CMainFrame::OnActivateApp(BOOL bActive, HASK hTask)中的它改成DWORD就可以了,声明中也要改回来,CMainFrame::OnActivateApp(BOOL bActive, DWORD hTask),这样消息映射才对应。
改完后还有一个经常出现的
1>AppLog.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/SAFESEH”规范)
1>GLAUX.LIB(image.obj) : error LNK2026: 模块对于 SAFESEH 映像是不安全的。
1>GLAUX.LIB(tkimage.obj) : error LNK2026: 模块对于 SAFESEH 映像是不安全的。
1>GLAUX.LIB(tkdib.obj) : error LNK2026: 模块对于 SAFESEH 映像是不安全的。
1>GLAUX.LIB(tk.obj) : error LNK2026: 模块对于 SAFESEH 映像是不安全的。
1>.\Debug\OpenGL.exe : fatal error LNK1281: 无法生成 SAFESEH 映像。
这是安全性问题,
解决方案,是绕过safeshe验证,方法是这样的
解决方法:
1.打开该项目的“属性页”对话框。
2.单击“链接器”文件夹。
3.单击“命令行”属性页。
4.将 /SAFESEH:NO 键入“附加选项”框中,然后点击应用
以上是关于error C2440: “static_cast”: 无法从“void (__thiscall CMainFrame::* )的主要内容,如果未能解决你的问题,请参考以下文章
错误 C2440: 'static_cast' : 无法从 'UINT (__thiscall CImportProjectDlg::* )(CPoint)' 转换为 'LRESULT (__this
错误 C2440:“static_cast”:无法从“void (__thiscall Visualizza::*)(char [])”转换为“AFX_PMSG”
VS 2010 中的 C++ 中的 static_cast 无法从 void* 转换为 size_t 错误