2012-10-01 30 views
0

将VC++ 6项目转换为VC++ 2010后,我修复了所有错误,但其中一个错误,我找不到解决方案。我在建设时收到一个错误:VC++ 2010:从VC6 ++转换后显示打开对话框出错

错误1错误C2440:'static_cast':无法从'void(__thiscall CUploadDlg :: *)(void)'转换为'LRESULT(__thiscall CWnd :: *)(WPARAM ,LPARAM)”

错误代码:

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; 
} 

项目类型::

调用方法的
BEGIN_MESSAGE_MAP(CUploadDlg, CDialog) 
    //{{AFX_MSG_MAP(CUploadDlg) 
    ON_MESSAGE(PARSE_DB_MSG, ParseUserDb) 
    //}}AFX_MSG_MAP 
END_MESSAGE_MAP() 

代码应用,使用MFC在静态库

回答

1

查看MFC消息映射的消息解密程序所期望的函数原型。 ON_MESSAGE()是一个通用的包装器,除了基本的msgID(它是如何分配给映射的)之外,不知道如何破解给定的消息。其余参数必须传递给消息处理程序,因此它预期ParseUserDb看起来像这样:

LRESULT CUploadDialog::ParseUserDb(WPARAM wParam, LPARAM lParam) 
{ 
// your code; don't forget a return value, likely 0L; 
}; 
+0

谢谢,这有帮助。但似乎我仍然有一些转换问题,因为我单击打开的文件后会打开部分打开对话框(显示底部部分和文件夹选择未在对话框窗口中加载)并崩溃。你知道可能会导致这种情况吗?单击“关闭”对话框会返回一个错误:AliEditor.exe中的0x77ca15de处出现未处理的异常:0xC0150010:当前正在执行的线程未被激活的激活上下文被激活。 – btomas