VC++ 2010:从 VC6++ 转换后显示打开对话框出错
Posted
技术标签:
【中文标题】VC++ 2010:从 VC6++ 转换后显示打开对话框出错【英文标题】:VC++ 2010: Error with Show open dialog after conversion from VC6++ 【发布时间】:2012-10-01 13:28:05 【问题描述】:将 VC++ 6 项目转换为 VC++ 2010 后,我已修复所有错误,但其中一个错误我找不到解决方案。我在构建时收到的错误:
错误 1 错误 C2440: 'static_cast' : 无法从 'void (__thiscall CUploadDlg::* )(void)' 转换为 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'
错误代码:
BEGIN_MESSAGE_MAP(CUploadDlg, CDialog)
//AFX_MSG_MAP(CUploadDlg)
ON_MESSAGE(PARSE_DB_MSG, ParseUserDb)
//AFX_MSG_MAP
END_MESSAGE_MAP()
调用方法代码:
void CUploadDlg::ParseUserDb()
m_parse_db.ShowWindow(SW_SHOW);
m_block_numbers = getBlockNumber();
Sleep(1200);
// CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
// if(pFrame) pFrame->UpdateDataBase(m_Path);
m_parse_finish.ShowWindow(SW_SHOW);
// Sleep(500);
// pFrame->SaveDataBase();//
// CDialog::OnCancel();
//return 0L;
项目类型:应用程序,在静态库中使用 MFC
【问题讨论】:
【参考方案1】:查看 MFC 消息映射的消息破解者期望的函数原型。 ON_MESSAGE() 是一个通用包装器,除了基本的 msgID(它是如何分发到地图的)之外,它不知道如何破解给定消息。剩余的参数必须传递给消息处理程序,因此它期望 ParseUserDb 看起来像这样:
LRESULT CUploadDialog::ParseUserDb(WPARAM wParam, LPARAM lParam)
// your code; don't forget a return value, likely 0L;
;
【讨论】:
谢谢,有帮助。但似乎我仍然有一些转换问题,因为在我单击打开文件后,它会部分打开打开对话框(显示底部部分和文件夹选择未加载到对话框窗口中)并崩溃。你知道是什么原因造成的吗?单击“关闭”对话框返回错误:AliEditor.exe 中 0x77ca15de 处的未处理异常:0xC0150010:被停用的激活上下文对于当前执行线程无效。以上是关于VC++ 2010:从 VC6++ 转换后显示打开对话框出错的主要内容,如果未能解决你的问题,请参考以下文章
我的vc 6.0 可以编译,可用链接,点击执行,显示ready,但弹不出黑框