一样一段程序,为什么在vc++6.0下就可以运行,而在vs2010下就会报错呢
同样一段程序,为什么在vc++6.0下就可以运行,而在vs2010下就会报错呢?
错误是debug assertion failed。在afxwin1.inl的第22行。但是我没咋看明白。
有啥关系。
------解决方案--------------------
面向对象中直接访问类成员是不安全的,应该用this->GetSafeHwnd()获取。
而且函数指针可以那么用吗?好吧,我out了。
最后没辙了可以用VS新建一个MFC工程,再把代码粘进去编译。
int CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
m_hLibrary = ::LoadLibrary(__T("fstrcv.dll"));
if(!m_hLibrary)
MessageBox(__T("装载模拟数据库失败!"));
INITCARD lpfunction = (INITCARD)::GetProcAddress(m_hLibrary, "InitCard");
if(!lpfunction)
{
MessageBox(__T("无法获取InitCard函数"));
return -1;
}
unsigned int uiCardNumber = (*lpfunction)((this->m_hWnd), WM_IRQSTOCK);
m_EnableMessage = (ENABLEMESSAGE)::GetProcAddress(m_hLibrary, "EnableMessage");
if(!m_EnableMessage)
MessageBox(__T("无法获取EnableMessage函数"));
m_recvInfo = (RECVINFO)::GetProcAddress(m_hLibrary,"ReceiveInfo");
if(!m_recvInfo)
MessageBox(__T("无法获取ReceiveInfo函数"));
m_DataAcquisition = (DATAAQUISITION)GetProcAddress(m_hLibrary,"DataAcquisition");
if(!m_DataAcquisition)
MessageBox(__T("无法获取DataAcquisition函数"));
return 0;
}
错误是debug assertion failed。在afxwin1.inl的第22行。但是我没咋看明白。
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
有啥关系。
------解决方案--------------------
unsigned int uiCardNumber = (*lpfunction)((this->m_hWnd), WM_IRQSTOCK);
面向对象中直接访问类成员是不安全的,应该用this->GetSafeHwnd()获取。
(*lpfunction)((this->m_hWnd), WM_IRQSTOCK)
而且函数指针可以那么用吗?好吧,我out了。
最后没辙了可以用VS新建一个MFC工程,再把代码粘进去编译。