ASSERT(::IsWindow(m_hWnd))
我在对话框界面上建了一个TEXT控件,可每次一执行到ASSERT(::IsWindow(m_hWnd));就出现Access Violationg.怎么回事呢?
具体如下:
我新建了一基于CWnd的类,在这个类中调用另一个类(基于CDialog)中的函数,即((CClientDlg*)wavedlg)->GetPort(2);函数定义如下:
u_short CClientDlg::GetPort(int pt)
{
int nPort;
if(pt==0)//数据端口
{
GetDlgItem(IDC_DATAPORT)->GetWindowText(m_dataport);
nPort = atoi(m_dataport);
if(nPort < 1 || nPort > 65535)
{
MessageBox("端口号错误!");
return 0;
}
return nPort;
}
if(pt==1) //视频端口
{
GetDlgItem(IDC_VIDEOPORT)->GetWindowText(m_videoport);
nPort=atoi(m_videoport);
if(nPort < 1 || nPort > 65535)
{
MessageBox("端口号错误!");
return 0;
}
return nPort;
}
if(pt==2) //语音端口
{
GetDlgItem(IDC_WAVEPORT)->GetWindowText(m_waveport);
nPort=atoi(m_waveport);
if(nPort < 1 || nPort > 65535)
{
MessageBox("端口号错误!");
return 0;
}
return nPort;
}
else return 0;
}
调试的话就会在这里出问题。
[解决办法]
ASSERT(::IsWindow(m_hWnd))
控件还不是一个窗口。创建并显示了吗?
[解决办法]
可能:
1.没有创建(没有初始化好或者根本没有初始化);
2.已经创建的窗口已经销毁;
3.由于其他地方数据越界修改了数据;
自己跟踪一下句柄的值,调用前先拦截判断看看。
[解决办法]
你不会在别的地方创建(New & Create)的CClientDlg对象吧?
在CWnd的类只声明了CClientDlg* 类型指针wavedlg就这么使用了?
呵呵
[解决办法]
应该是对象已经不存在了,搂主慢慢找一找!